我有一个用Ruby编写的使用Selenium,Watir和ChromeDriver编写的抓取脚本,所有这些脚本都可以正常使用Chrome浏览器窗口,但尝试在无头模式下运行只需点击;
Selenium::WebDriver::Error::UnknownError: unknown error: Element <input id="desired_element" type="checkbox" name="desired_element" checked="checked"> is not clickable at point (660, 594). Other element would receive the click: <html lang="en">...</html>
我使用的是Watir 6.8和最新的Chromedriver 2.33。
在无头与非无头的情况下,任何想法都是在页面的不同行为背后,以及我如何处理这个问题?
答案 0 :(得分:4)
错误消息告诉您当“其他元素将收到点击:”
时出现问题这意味着屏幕上的其他元素覆盖了您尝试与之交互的复选框。可能这是由于无头模式下的默认浏览器大小与浏览器的默认大小不同而非无头运行造成的,导致元素排列不同
我们可以通过在无头模式和普通模式下询问窗口大小并查看结果值是否相同来验证是否是这种情况。
size = browser.window.size
puts "The browser window is #{size.width} wide by #{size.height} high"
有几种可能的方法可以解决这个问题:
指定或更改浏览器的“窗口”大小。例如
browser.window.resize_to 1024, 768
我更喜欢这个,并且通常有一个命令来设置 初始化后的浏览器大小。设置为 您网站支持的最小尺寸,或建议的最低尺寸 大小
使用其他方法“点击”复选框,例如在其中发送空格
@browser.checkbox(name: "desired_element").send_keys " "
我不喜欢这个,因为它并没有真正解决问题的根源,并且随着脚本的进展,您可能会遇到与网站上的其他元素交互的其他类似问题。
答案 1 :(得分:-2)
出现这种错误的原因是网页加载不足以定位元素。正如你所提到的那样,以前通过测试的时候,无头真的这样的问题可能是因为.click(),请尝试用.send_keys替换.click
.send_keys(selenium.webdriver.common.keys.Keys.SPACE)
使用.send_keys()时,如果找不到元素,可能会遇到另外一个问题,为了解决这个问题,你必须找到元素
elements = driver.find_element_by_tag_name("html")
elements.send_keys(Keys.SPACE)
希望这会对你有所帮助。