Sélénium: Comment Injecter/exécuter un script Javascript dans une Page avant le chargement/l'exécution de toutes les autres scripts de la page?
Je suis en utilisant le sélénium python webdriver afin de parcourir quelques pages. Je veux injecter un code javascript dans une des pages avant tous les autres codes Javascript chargés et exécutés. D'autre part, j'ai besoin de mon code JS pour être exécuté en tant que premier code JS de la page. Est-il un moyen de le faire par le Sélénium?
Je l'ai googlé pour un couple d'heures, mais je ne pouvais pas trouver une réponse!
- Mais ma question est que la façon dont je peux injecter du code JS en utilisant Selenium Webdriver avant le chargement de la page. Je n'ai pas accès au contenu de ces pages, donc je ne peux pas injecter un code JS en eux, à moins que j'utilise un proxy pour réécrire le contenu de la page.
- Je pense, j'ai trouvé la réponse. Selon grokbase.com/t/gg/selenium-users/12a99543jq/..., Nous ne pouvons pas faire, qu'à moins d'utiliser un proxy pour injecter un script au début de la page.
- Seriez-vous en mesure d'installer une application comme GreaseMonkey ou Tampermonkey pour injecter des scripts? addons.mozilla.org/en-us/firefox/addon/greasemonkey
- Yap, vous pouvez le faire par votre propre extension ou GreaseMonkey.
- Si vous n'êtes pas à l'aide d'un affichage physique et d'utiliser quelque chose comme PhantomJS, vous pouvez obtenir le DOM de la page cible. Ensuite, vous pouvez parcourir le DOM, d'injecter votre script et ajouter un
onLoad
déclencheur pour exécuter le script au chargement de la page. C'est l'un des moyens les plus directs comme je vois qu'il se passe.
Vous devez vous connecter pour publier un commentaire.
Si vous ne pouvez pas modifier le contenu de la page, vous pouvez utiliser un proxy, ou utiliser un script contenu dans une extension installée sur votre navigateur. Le faire au sein de sélénium vous écrire un peu de code qui permet de faire le script en tant que l'un des enfants d'un élément existant, mais vous ne serez pas en mesure de l'exécuter avant le chargement de la page (lorsque votre permis de
get()
appel retourne.)La documentation laisse indéterminé le moment où le code de démarrage de l'exécution. Vous souhaitez avant de le DOM commence chargement, de sorte que la garantie peut être seulement de satisfiable avec le proxy ou l'extension du contenu du script de la route.
Si vous pouvez instrument de votre page avec un minimum de harnais, vous pouvez détecter la présence d'une url spéciale paramètre de requête et de la charge du contenu supplémentaire, mais vous devez le faire à l'aide d'un script en ligne. Pseudo:
Si vous voulez injecter quelque chose dans le code html d'une page avant, il est interprété et exécuté par le navigateur, je voudrais suggérer que vous utilisez un proxy comme Mitmproxy.
Il est maintenant https://pypi.org/project/selenium-wire/ qui le rend relativement facile à consulter/modifier toutes les demandes.
donc je sais que ça fait quelques années, mais j'ai trouvé un moyen de le faire sans modifier le contenu de la page et sans l'aide d'un proxy! Je suis à l'aide de la nodejs version, mais sans doute l'API est la même pour les autres langues. Ce que vous voulez faire est comme suit
Que 'hâte' option fonctionne pour moi. Vous devrez peut-être utiliser le 'none' option.
Documentation: https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/lib/capabilities_exports_PageLoadStrategy.html
EDIT: Notez que le 'hâte' option n'a pas été mis en œuvre dans Chrome encore...