python Selenium驱动程序get_log()突然停止

x33g5p2x  于 2023-01-08  发布在  Python
关注(0)|答案(1)|浏览(149)
    • bounty将在2天后过期**。回答此问题可获得+100声望奖励。HJA24希望引起更多人关注此问题。

我有一个脚本,它创建多个selenium.webdriver示例,执行一个js-script并读取它们的结果日志。大多数情况下,脚本运行没有问题,但在少数情况下,日志在运行一段时间后突然停止。我不知道如何模拟错误。
我的headless webdriver基于这个answer,定义如下:

import threading
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

threadLocal = threading.local()
DRIVER_PATH = '/chromedriver'

def create_driver_headless() -> webdriver.Chrome:
    driver = getattr(threadLocal, 'driver', None)
    if driver is None:
        dc = DesiredCapabilities.CHROME
        dc['goog:loggingPrefs'] = {'browser': 'ALL'}
        chrome_options = Options()
        chrome_options.add_argument('--disable-infobars')
        chrome_options.add_argument('--disable-gpu')
        chrome_options.add_argument('--disable-logging')
        chrome_options.add_argument('--disable-extensions')
        chrome_options.add_argument('--disable-notifications')
        chrome_options.add_argument('--disable-default-apps')
        chrome_options.add_argument('--window-size=1920,1080')
        chrome_options.add_argument('--headless')
        chrome_options.add_argument('--no-sandbox')
        chrome_options.add_argument('--disable-dev-shm-usage')
        chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])
        chrome_options.add_experimental_option('useAutomationExtension', False)

        driver = webdriver.Chrome(executable_path=CHROME_DRIVER,
                                  desired_capabilities=dc,
                                  chrome_options=chrome_options)

        setattr(threadLocal, 'driver', driver)

    return driver

我读了日志

while True:
       logs = driver.get_log('browser')
       for log in logs:
          # do something

我最初的猜测是headless驱动程序崩溃了,但是,在我的脚本后面,我有下面的代码,这是令人满意的(返回None):

if len(logs) == 0:
    try:
        if 'END' in driver.find_element(By.XPATH, f"(.//*[@class='sr-match-set-sports__status-str srm-is-uppercase']").text:
            return None

    except NoSuchElementException:
        continue

我假设如果驱动程序崩溃了,这一行应该返回一个NoSuchElementException,所以我可以得出结论,它没有崩溃?
我也可以肯定,通过同时检查谷歌浏览器中的网址,应该已经收到了额外的日志。
你知道是什么导致了这种行为吗?

zzwlnbp8

zzwlnbp81#

好吧,我不知道,但这可能是因为交通,你得到由于无头.尝试driver.implicitly_wait(5)

相关问题