使用无头浏览器进行调试

时间:2017-09-02 20:39:11

标签: java selenium webdriver selenium-chromedriver google-chrome-headless

我有一个WebDriver测试套件,当我在普通和无头浏览器中执行它时,它的运行方式不同。当我在无头模式下执行它时,找不到一个元素,但是当我在正常模式下使用相同的代码,相同的驱动程序时,会发现该元素。 我用这个标志来设置无头模式:

chromeOptions.addArguments("--headless");

正在使用ChromeDriver 2.31WebDriver 3.5.2。我该怎么调试呢?

3 个答案:

答案 0 :(得分:4)

有两种调试方法。您可以获取页面源并检查有什么不同。

现在,当您使用Selenium启动浏览器时,它正在使用调试会话来自动化Chrome。因此,您无法使用此功能对您的网站执行远程调试。

您需要手动启动Chrome。

chrome --headless --remote-debugging-port=9222 --disable-gpu http://tarunlalwani.com

现在打开另一个chrome并通过转到http://127.0.0.1:9222调试该站点并检查该站点。

Debugging Session

答案 1 :(得分:1)

要进行无头调试,请尝试在出现错误之前获取屏幕截图:

在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')

答案 2 :(得分:0)

对于任何为此苦苦挣扎的人(就像我以前一样),您可以在硒中使用一种强大的方法,称为execute_script

作为一个例子,我通过xpath找到一个元素并单击它:

browser.find_element_by_xpath("//li[@id='tabletid']").click()

但是这不是没有意义的。在检查了元素之后,我发现按钮单击实际上执行了一条简单的javascript行。所以我用:

js = """drawTable();
            return false;"""
    
browser.execute_script(js)

,我实际上能够提取我的数据!现在我的脚本可以在ssh,docker等环境中工作了。