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 .

  • Selenium + firefox: пустые аргументы execute_script
  • Как исправить Selenium WebDriverException: браузер, кажется, вышел, прежде чем мы могли подключиться?
  • Загрузка файла в указанное место с помощью Selenium и python
  • Объединение Dataframes, которое было получено через веб-скребок
  • Как настроить тестовый пример Selenium Grid Python для тестирования нескольких машин?
  • Терапия с помощью селена, но не очистка
  • selenium получает установку под пакетами python 2.7
  • Установите флажок, используя Selenium с Python
  • Python - лучший язык программирования в мире.