在 Selenium 中使用无头选项时出现 TimeoutException

Posted

技术标签:

【中文标题】在 Selenium 中使用无头选项时出现 TimeoutException【英文标题】:TimeoutException when using headless option in Selenium 【发布时间】:2021-08-20 20:24:48 【问题描述】:

我正在尝试从一个元素中获取内部 html。但我在无头模式下遇到超时异常。如果我禁用无头,它可以工作。我也需要无头模式的元素。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
options = webdriver.ChromeOptions()
options.headless = True
browser = webdriver.Chrome(executable_path="./driver/chromedriver", options=options)
browser.get("https://inspiring-lewin-33088d.netlify.app")
try:
    element = WebDriverWait(browser, 10).until(
      expected_conditions.presence_of_element_located((By.ID, "zp"))
    )
    s = element.get_attribute('innerHTML')
    print(s)
finally:    
    browser.close()

我尝试过其他解决方案,例如添加

options.add_argument("--window-size=1920,1080") options.add_argument('--start-maximized')

但它们不起作用。感谢您的帮助。

【问题讨论】:

【参考方案1】:

将 chrome 更新到 v66 并将 chromedriver 更新到 v2.38 并设置以下选项:

ChromeOptions options = new ChromeOptions(); 
options.addArguments("--window-size=1920,1080"); 
options.addArguments("--disable-gpu"); 
options.addArguments("-- disable-extensions"); 
options.setExperimentalOption("useAutomationExtension", false); 
options.addArguments("--proxy-server='direct://'"); 
options.addArguments("--proxy-bypass-list=*"); 
options.addArguments("--start-maximized"); 
options.addArguments("--headless"); 

应该解决问题

【讨论】:

以上是关于在 Selenium 中使用无头选项时出现 TimeoutException的主要内容,如果未能解决你的问题,请参考以下文章

切换选项卡时,带有无头 chrome 的 Selenium 无法获取 url

使用 selenium 在无头模式下运行 Firefox 错误:“选项”对象没有属性“二进制”

如何使用 Java 和 Selenium 为我的驱动程序传递无头选项?

在 Python 中使用 chromedriver_autoinstaller 运行 selenium 时出现问题

尝试启动 Firefox 时出现 Python selenium 错误

Selenium.WebDriver - 当我尝试在 Chrome 中运行测试时出现错误