Selenium处于无头模式时发生超时异常



我通过以下方式创建驱动程序:

options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('headless')
options.add_argument('disable-infobars')
options.add_argument('--remote-debugging-port=9222')
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument("--disable-notifications")
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_argument('--proxy-server=%s' % proxy)
driver = webdriver.Chrome(executable_path='down/chromedriver.exe',chrome_options=options)

使用后:

driver.get('https://myip.ru/')
r=WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH,'//*[@id="ipcontent"]/table/tbody/tr[2]/td'))).text
print(r)

我得到:

Traceback (most recent call last):
File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
self.run()
File "/usr/lib/python3.8/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "twitter.py", line 220, in main
r=WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH,'//*[@id="ipcontent"]/table/tbody/tr[2]/td'))).text
File "/usr/local/lib/python3.8/dist-packages/selenium/webdriver/support/wait.py", line 80, in until
raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: 

但它在没有无头模式的情况下运行良好

我也尝试在vds上启动它,并使用ip代理登录。

你已经得到了答案,但我找到了:options.add_argument("--headless=new")它对我有效。

我可能错了,但headless选项与--headless有关,您忘记了-部分。

此错误消息。。。

r=WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH,'//*[@id="ipcontent"]/table/tbody/tr[2]/td'))).text
File "/usr/local/lib/python3.8/dist-packages/selenium/webdriver/support/wait.py", line 80, in until
raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message

意味着在搜索引发WebDriver的元素时引发了TimeoutException。使用以下基于xpath的定位器策略等待元素的可见性:

//*[@id="ipcontent"]/table/tbody/tr[2]/td

当在无头模式下以不同方式加载HTMLDOM时,偶尔会观察到这种现象。

您可能希望构建一个更规范的定位器策略,该策略在DOM树中唯一标识WebElement,并且应该是一个单独的讨论。

相关内容

  • 没有找到相关文章

最新更新