Как получить новую страницу после селеновых тайм-аутов на бесконечно загружаемую страницу - PullRequest
0 голосов
/ 26 апреля 2018

Я столкнулся с проблемной страницей, которая заставляет Selenium Chrome (селен версии 3.10.0 в python 3, chromedriver версии 2.35.528157) на MacOSX зависать, я думаю, потому что на странице что-то неопределенно загружается. Проблема заключается в том, что после этого тайм-аута все последующие запросы к драйверу .get () нового URL также завершаются с таймаутом, даже если они работали раньше. Фактически, наблюдая за браузером, он никогда не отправляется на новый URL. Это, конечно, делает браузер бесполезным для дальнейших сессий.

Как я могу "сбросить" драйвер, чтобы я мог продолжать его использовать? Или, если это не удалось, как я могу отладить, почему команда .get () не работает после посещения проблемной страницы. Код и мой вывод приведены ниже (проблемная страница - http://coastalpathogens.wordpress.com/2012/11/25/onezoom/: мне было бы интересно, если бы другие люди увидели то же самое и с другими страницами тоже

from selenium import webdriver
from selenium.common.exceptions import TimeoutException

browser = webdriver.Chrome()
browser.set_page_load_timeout(10)
browser.implicitly_wait(1)

for link in ("http://www.google.com", "http://coastalpathogens.wordpress.com/2012/11/25/onezoom/","http://www.google.com"):
    try:
        print("getting {}".format(link))
        browser.get(link)
        print("done!")
    except TimeoutException:
        print("Timed out")
        continue

результат:

getting http://www.google.com
done!
getting http://coastalpathogens.wordpress.com/2012/11/25/onezoom/
Timed out
getting http://www.google.com
Timed out

1 Ответ

0 голосов
/ 26 апреля 2018

В соответствии с вашим вопросом и вашим собственным блоком кода, я выполнил ваш собственный код, настроив несколько настроек ChromeDriver через класс chrome.options , как показано ниже, и он работает perfecto:

Блок кода:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import TimeoutException

options = Options()

options.add_argument("start-maximized")
options.add_argument("disable-infobars")
options.add_argument("--disable-extensions")
browser = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
browser.set_page_load_timeout(10)

for link in ("http://www.google.com", "http://coastalpathogens.wordpress.com/2012/11/25/onezoom/","http://www.google.com"):
    try:
        print("getting {}".format(link))
        browser.get(link)
        print("done!")
    except TimeoutException:
        print("Timed out")
    continue

Вывод на консоль:

getting http://www.google.com
done!
getting http://coastalpathogens.wordpress.com/2012/11/25/onezoom/
done!
getting http://www.google.com
done!

Проблема на вашем конце и решение

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

...