使用无头浏览器进行调试

Debugging with headless browser

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

chromeOptions.addArguments("--headless");

ChromeDriver 2.31WebDriver 3.5.2正在使用中。我该如何调试它?

有两种调试方式。您可以获取 Page Source 并检查有何不同。

现在,当您使用 Selenium 启动浏览器时,它会使用调试会话来实现自动化 chrome。所以你不能用它对你的网站进行远程调试。

您需要手动启动 chrome。

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

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

为了debug headless,尝试获取错误前的截图:

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

但这在 headless 中不起作用。检查元素后,我发现单击按钮实际上执行了一个简单的 javascript 行。所以我将这一行替换为:

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

而且我真的能够提取我的数据!现在我的脚本可以在 ssh、docker 等

中运行