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

时间:2018-05-14 09:48:42

标签: python google-chrome selenium

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

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

  

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

...

    (会议信息:无头铬= 66.0.3359.139)     (驱动程序信息:chromedriver = 2.37.544337(8c0344a12e552148c185f7d5117db1f28d6c9e85),platform = Mac OS X 10.13.4 x86_64)

此错误曾在我的非无头模式中发生,但由于我将浏览器的大小更改为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()

3 个答案:

答案 0 :(得分:1)

  

但是因为我通过driver.maximize_window()

更改了浏览器的大小

当我在詹金斯与headless Chrome合作时,我遇到过这个问题。问题是,无头模式的浏览器没有以全分辨率打开。所以我添加了一行,使用

以特定的分辨率打开浏览器
driver.set_window_size(1440, 900)

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

答案 1 :(得分:1)

简短的回答:是的。

但是在无头和无头模式下使用点击有一个区别。 对于非HEADLESS模式,如果您在chromedriver中进行单击,同时您自己在屏幕上的某个位置执行了单击,那么这可能会干扰Selenium自动化。在HEADLESS模式下这不是问题。

由我自己验证! :-)

答案 2 :(得分:1)

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

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--window-size=1920,1080')  
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(chrome_options=chrome_options)