为什么 Watir Chrome Headless 'not clickable at point (x,y)' 在浏览器模式下一切正常?

Why Watir Chrome Headless 'not clickable at point (x,y)' when all fine in with browser mode?

我有一个用 Ruby 编写的抓取脚本,它使用 Selenium、Watir 和 Chrome 驱动程序,在 Chrome 浏览器 window 上一切正常,但是尝试在无头模式下 运行 成功;

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 和最新的 Chrome驱动程序 2.33。

关于无头与非无头页面的不同行为背后的任何想法,我该如何处理?

出现这种错误的原因是网页加载不够好,无法定位该元素。正如您所提到的,当您没有 headless true 时,之前通过的测试可能是因为 .click() ,请尝试将 .click 替换为 .send_keys

.send_keys(selenium.webdriver.common.keys.Keys.SPACE)

当您使用 .send_keys() 时,如果找不到元素,您可能会遇到另一个问题,要解决此问题,您必须找到元素

elements = driver.find_element_by_tag_name("html")
elements.send_keys(Keys.SPACE)

希望对您有所帮助。

错误消息告诉您问题是什么 "Other element would receive the click:"

这意味着屏幕上的某些其他元素覆盖了您尝试与之交互的复选框。这可能是由于无头模式下的默认浏览器大小与 运行 非无头浏览器的默认大小不同,导致元素排列不同

我们可以通过在无头模式和正常模式下询问 window 的大小并查看结果值是否相同来验证是否属于这种情况。

size = browser.window.size
puts "The browser window is #{size.width} wide by #{size.height} high"

有几种可能的方法可以解决这个问题:

  1. 指定或更改浏览器 'window' 大小。例如 browser.window.resize_to 1024, 768

    我更喜欢这个,通常会有这样的命令来设置 初始化后的浏览器大小。设置为 您网站支持的最小尺寸,或推荐的最小尺寸 尺码

  2. 使用另一种方法 'click' 在复选框上,例如向其发送 space @browser.checkbox(name: "desired_element").send_keys " "

    我不喜欢这个,因为它并没有真正解决问题的根源,并且随着脚本的进行,您可能会遇到与网站上其他元素交互的其他类似问题。