使用无头浏览器进行调试
Debugging with headless browser
我有一个 WebDriver
测试套件,当我在普通浏览器和无头浏览器中执行它时,它的运行方式不同。有一个元素在无头模式下执行时找不到,但在正常模式下使用相同的代码、相同的驱动程序时找到。
我使用这个标志来设置无头模式:
chromeOptions.addArguments("--headless");
ChromeDriver 2.31
和WebDriver 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 等
中运行
我有一个 WebDriver
测试套件,当我在普通浏览器和无头浏览器中执行它时,它的运行方式不同。有一个元素在无头模式下执行时找不到,但在正常模式下使用相同的代码、相同的驱动程序时找到。
我使用这个标志来设置无头模式:
chromeOptions.addArguments("--headless");
ChromeDriver 2.31
和WebDriver 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 等
中运行