我有一个WebDriver
测试套件,当我在普通和无头浏览器中执行它时,它的运行方式有所不同。有一个元素在无头模式下执行时找不到,但在正常模式下使用相同的代码、相同的驱动程序时找到。我使用这个标志来设置无头模式:
chromeOptions.addArguments("--headless");
有ChromeDriver 2.31
并且WebDriver 3.5.2
在使用中。我怎么能调试这个?
我有一个WebDriver
测试套件,当我在普通和无头浏览器中执行它时,它的运行方式有所不同。有一个元素在无头模式下执行时找不到,但在正常模式下使用相同的代码、相同的驱动程序时找到。我使用这个标志来设置无头模式:
chromeOptions.addArguments("--headless");
有ChromeDriver 2.31
并且WebDriver 3.5.2
在使用中。我怎么能调试这个?
对于无头调试,请尝试在错误之前获取屏幕截图:
在 Python 中:
WINDOW_SIZE = "1200,900" opts.add_argument("--window-size=%s" % self.WINDOW_SIZE)
if self.HEADLESS: opts.add_argument('--headless')
self.driver = webdriver.Chrome(executable_path=chromedriver,options=opts)
driver.save_screenshot('./foto.png')
对于任何为此苦苦挣扎的人(就像我一样),您可以在 selenium 中使用一种强大的方法,称为execute_script
.
例如,我通过 xpath 找到一个元素并单击它:
browser.find_element_by_xpath("//li[@id='tabletid']").click()
但这在无头情况下不起作用。检查元素后,我发现按钮单击实际上执行了一个简单的 javascript 行。所以我将这一行替换为:
js = """drawTable();
return false;"""
browser.execute_script(js)
我能够真正提取我的数据!现在我的脚本将在 ssh、docker 等中运行。