window.stop () через execute_script () не работает в chromedriver, но работает в geckodriver - PullRequest
0 голосов
/ 03 мая 2019

Я пытаюсь остановить браузер, когда загрузка занимает слишком много времени.Для этого я использую метод window.stop(); через селен execute_script()

Chrome Fails

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities


capa = DesiredCapabilities.CHROME
capa["pageLoadStrategy"] = "none"
driver = webdriver.Chrome(desired_capabilities=capa)

driver.get('http://deelay.me/15000/http://httpbin.org/ip') #loads a page after 15 seconds

driver.execute_script("window.stop();")

Хотя мы получаем быстрый контроль над объектом браузера, т.е. driver из-заpageLoadStrategy -> Нет;мы не можем использовать это много.т.е. скрипт выполняется только после полной загрузки страницы, блокируя 15 секунд.

Нет ошибок или исключений, он просто зависает без возврата элемента управления.

Chromium 73.0.3683.75 Построен на Ubuntu,работает на Ubuntu 18.04

ChromeDriver 2.43.600233 (523efee95e3d68b8719b3a1c83051aa63aa6b10d)

Python selenium 3.14.1

По сравнению с этим браузером Firefoxвыполняет скрипт и останавливает загрузку страницы.

Firefox Passes

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities


capa = DesiredCapabilities.FIREFOX
capa["pageLoadStrategy"] = "none"
driver = webdriver.Firefox(desired_capabilities=capa)

driver.get('http://deelay.me/15000/http://httpbin.org/ip') #loads a page after 15 seconds

driver.execute_script("window.stop();")

Здесь мы можем не только остановить выполнение, но и вызвать новый URL, который не являетсявозможно в хром.

Firefox 66.0.1

Geckodriver 0.23.0 (2018-10-04)

Python selenium 3.14.1

Это предполагаемое поведение или ошибка.Что-то не так с моей стороны?

1 Ответ

0 голосов
/ 03 мая 2019

Похоже, ваша основная проблема связана с реализацией команды window.stop(); с использованием execute_script().

До ChromeDriver 74.0.3729.6 , ChromeDriver и Chrome соответствует OSS и реализует протокол JSON wire . Однако при наличии ChromeDriver v75.0.3770.8 , ChromeDriver и Chrome теперь работает в W3C стандарт совместимый режим по по умолчанию .


Решение

Если вы ожидаете, что ChromeDriver и Chrome будут вести себя так же, как GeckoDriver и Firefox , вы должны начать использовать ChromeDriver 75.0.3770.8 и другие соответствующие двоичные файлы.


Прибытие ChromeDriver 75.0.3770.8

Джон Чен (владелец - chromedriver) недавно объявил, что:

Мы рады сообщить, что ChromeDriver версии 75.0.3770.8 выпущен и доступен на сайте загрузок ChromeDriver . Эта версия ChromeDriver предназначена для пользователей предстоящей бета-версии Chrome версии 75.

В этой новой версии наиболее заметным изменением является то, что ChromeDriver теперь по умолчанию работает в режиме стандарт W3C . Устаревший проводной протокол JSON все еще поддерживается, но будет удален в будущем.

Пожалуйста, смотрите примечания к выпуску для других изменений, включенных в этот выпуск.


Снимок электронной почты от Джона Чена

ChromeDriver75

...