Selenium Chrome (Python): браузер зависает - в этом случае тайм-аут и выход из браузера - PullRequest
0 голосов
/ 20 октября 2019

Я использую Selenium Chrome для извлечения информации из онлайн-источников. По сути, я перебираю список URL-адресов (хранится в mylinks) и загружаю веб-страницы в браузере следующим образом:

from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("window-size=1200,800")
browser = webdriver.Chrome(chrome_options=options)
browser.implicitly_wait(30)

for x in mylinks:
    try:
        browser.get(x)
        soup = BeautifulSoup(browser.page_source, "html.parser")
        city = soup.find("div", {"class": "city"}).text
    except:
        continue

Моя проблема в том, что браузер "зависает" в некоторыхточка. Я знаю, что эта проблема вызвана веб-страницей. Как следствие, моя рутина останавливается, так как браузер больше не работает. Также browser.implicitly_wait(30) здесь не помогает. Ни явное, ни неявное ожидание не решает проблему.

Я хочу «тайм-аут» проблемы, то есть я хочу quit() браузер через x секунд (в случае зависания браузера) и перезапустить его.

Я знаю, что мог бы использовать subprocess с timeout, например:

def startprocess(filepath, waitingtime):
    p = subprocess.Popen("C://mypath//" + filepath)
    try:
        p.wait(waitingtime)
    except subprocess.TimeoutExpired:
        p.kill()

Однако для моей задачи это решение было бы вторым наилучшим.

Вопрос: существует ли альтернативный способ тайм-аута шага browser.get(x) в цикле выше (в случае зависания браузера) и перехода к следующему шагу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...