Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dynamic JS execution #31

Open
nrigaudiere opened this issue Sep 27, 2023 · 0 comments
Open

Dynamic JS execution #31

nrigaudiere opened this issue Sep 27, 2023 · 0 comments
Labels
CDP Chrome Debug Protocol DOM API Investigate

Comments

@nrigaudiere
Copy link
Member

nrigaudiere commented Sep 27, 2023

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 nrigaudiere added Investigate CDP Chrome Debug Protocol DOM API labels Sep 27, 2023
@francisbouvier francisbouvier transferred this issue from another repository Sep 29, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CDP Chrome Debug Protocol DOM API Investigate
Projects
None yet
Development

No branches or pull requests

1 participant