9

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

chromeOptions.addArguments("--headless");

ChromeDriver 2.31并且WebDriver 3.5.2在使用中。我怎么能调试这个?

4

3 回答 3

6

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

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

您需要手动启动 chrome。

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

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

调试会话

于 2017-09-02T21:26:44.083 回答
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')
于 2019-03-21T17:18:58.873 回答
0

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

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

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

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

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

我能够真正提取我的数据!现在我的脚本将在 ssh、docker 等中运行。

于 2020-10-09T03:29:01.087 回答