browser icon indicating copy to clipboard operation
browser copied to clipboard

Dynamic JS execution

Open nrigaudiere opened this issue 1 year ago • 0 comments

Un browser classique, y compris Chrome Headless, part du principe que l’ensemble du Javascript inclus dans un site web est nécessaire à son correct rendu. Par conséquent il execute l’ensemble du Javascript inclus. Ce JS peut être coûteux, en CPU/RAM mais aussi en réseau (calls Ajax).

Dans le cas d’un browser headless sans rendering graphique on pourrait partir du principe que seul le Javascript impliqué dans les actions pilotées par CDP est essentiel.

Par exemple sur une page produit d’un site e-commerce, on pourrait vouloir scraper les notes et commentaires des utilisateurs mais pas les produits similaires (2 cas classiques utilisant du Javascript). Dans ce cas pourquoi charger le JS des produits similaires si celui-ci ne va pas être utilisé ?


Par ailleurs cette execution dynamique (ou partielle) est aussi un piège pour browser fingerprinting, voire des résultats incohérents du JS suite à cette execution partielle.


2 options à première vue:

  1. Une heuristique (ou une IA?) basée sur chaque script CDP (et chaque page web), donc en dehors du browser lui-même
  2. Un principe d’execution séquentielle. On execute rien dans un premier temps, si le code CDP ne trouve pas un élément on avance d’une étape en JS, et ainsi de suite. Pas sûr que cette technique soit si efficace compte tenu de l’objectif d’économie initial.

Le principe est simple mais la mise en place d’une telle fonctionnalité est très complexe, car 2 éléments de nature différentes sont concernées:

  • le code JS du site, décidé côté serveur (même si il s’execute côté client)
  • le code CDP du client

Le code JS n’a pas idée du code CDP, et le code CDP ne connait pas le détail du code JS, il s’intéresse juste au résultat (à la différence de la retro-ingénierie en HTTP de base).

nrigaudiere avatar Sep 27 '23 16:09 nrigaudiere