Selenium: Как вставлять / выполнять Javascript на странице перед загрузкой / выполнением каких-либо других скриптов на странице?

Я использую selenium python webdriver для просмотра некоторых страниц. Я хочу ввести код javascript на страницы, прежде чем загружать и выполнять любые другие коды Javascript. С другой стороны, мне нужен мой JS-код, который будет выполнен как первый JS-код этой страницы. Есть ли способ сделать это Selenium?

Я пару раз заглядывал в нее, но я не мог найти правильного ответа!

2 Solutions collect form web for “Selenium: Как вставлять / выполнять Javascript на странице перед загрузкой / выполнением каких-либо других скриптов на странице?”

Если вы не можете изменить содержимое страницы, вы можете использовать прокси-сервер или использовать скрипт содержимого в расширении, установленном в вашем браузере. Сделав это в селене, вы напишете код, который вводит скрипт в качестве одного из дочерних элементов существующего элемента, но вы не сможете запустить его до загрузки страницы (когда возвращается вызов get() вашего драйвера get() .

 String name = (String) ((JavascriptExecutor) driver).executeScript( "(function () { ... })();" ... 

Документация оставляет неуказанным момент начала выполнения кода. Вы хотите, чтобы это было до того, как DOM начнет загрузку, так что гарантия может быть выполнена только с помощью прокси-сервера или прокси-сервера.

Если вы можете измерить свою страницу с минимальной упряжкой, вы можете обнаружить наличие специального параметра запроса url и загрузить дополнительный контент, но вам нужно сделать это с помощью встроенного скрипта. псевдокод:

  <html> <head> <script type="text/javascript"> (function () { if (location && location.href && location.href.indexOf("SELENIUM_TEST") >= 0) { var injectScript = document.createElement("script"); injectScript.setAttribute("type", "text/javascript"); //another option is to perform a synchronous XHR and inject via innerText. injectScript.setAttribute("src", URL_OF_EXTRA_SCRIPT); document.documentElement.appendChild(injectScript); //optional. cleaner to remove. it has already been loaded at this point. document.documentElement.removeChild(injectScript); } })(); </script> ... 

Если вы хотите что-то вставить в html страницы, прежде чем он будет разобран и выполнен браузером, я бы предложил использовать прокси-сервер, такой как Mitmproxy .

  • Предотвращение загрузки CSS / другого ресурса в PhantomJS / Selenium, управляемом Python
  • Создание Exe с модулем Selenium: Py2exe / Pyinstaller
  • python selenium очищает тём
  • Python Selenium Webdriver Не удалось запустить браузер браузера: разрешение отклонено
  • Python Selenium: Firefox neverAsk.saveToDisk при загрузке с URL-адреса Blob
  • Выбор значения из раскрывающегося списка с использованием selenium python
  • Выбор элемента с текстом с помощью Selenium WebDriver
  • Захват сети с помощью Selenium / PhantomJS
  • Python - лучший язык программирования в мире.