即使在无头模式下,是否可以在带有 Chrome 的 Selenium 上使用 `element.click()`?

Bla*_*ard 4 python selenium google-chrome

我正在编写一个脚本来使用 Python 中的 Selenium 及其 Chrome 驱动程序在网站上下载一组文件,但我发现浏览器打开并在程序打开新选项卡或单击下载时获得焦点时很恶心按钮。

所以我宁愿使用无头模式。但是,该元素总是让我出现以下错误:

WebDriverException:消息:未知错误:元素...在点 (435, 575) 处不可点击。其他元素将收到点击:

...

(会话信息:headless chrome=66.0.3359.139)(驱动程序信息:chromedriver=2.37.544337(8c0344a12e552148c185f7d5117db1f28d6c9e85),平台=Mac OS X 10.16)。

这个错误曾经发生在我的非无头模式下,但由于我将浏览器的大小更改了driver.maximize_window(),错误消失了。这可以清楚地表明按钮必须在屏幕上可见,才能在 Chrome 上推送。

但是在无头模式下,按钮被隐藏可能是真的,这就是元素始终无法点击的方式,从而导致错误。那么有没有办法让按钮即使在无头模式下也可以点击?

相关代码如下,最后一行导致报错:

def login(driver, url, username, password):
    driver.get(url)
    uname = driver.find_element_by_name("login")
    uname.send_keys(username) 

    passw = driver.find_element_by_name("password")
    passw.send_keys(password)
    submit_button = driver.find_element_by_class_name("button")
    action = webdriver.ActionChains(driver)
    action.move_to_element(submit_button)
    submit_button.click()
Run Code Online (Sandbox Code Playgroud)

dem*_*123 9

但是因为我通过 driver.maximize_window() 改变了浏览器的大小

headless Chrome在 Jenkins工作时遇到过这个问题。问题是浏览器在无头模式下没有以全分辨率打开。所以我添加了一行以使用特定分辨率打开浏览器

driver.set_window_size(1440, 900)
Run Code Online (Sandbox Code Playgroud)

然后传递 url 并获取所有内容。您可以尝试这种方法一次,看看这是否是问题所在。


Yun*_*ang 5

我也遇到了这个问题。我只是像这样修复它:

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--window-size=1920,1080')  
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(chrome_options=chrome_options)
Run Code Online (Sandbox Code Playgroud)