使用 chromedriver 启用“保留日志”

Enable "preserve log" with chromedriver

提问人:Michał Matyjek 提问时间:12/1/2017 更新时间:6/19/2023 访问量:2451

问:

希望使用 chromedriver 启用“保留日志”。https://sites.google.com/a/chromium.org/chromedriver/capabilities loggingPrefs 指向 google 代码存档页面,不是很有帮助。

我的总体目标是在测试执行期间解析日志以查找错误,但是日志在页面导航时会被清除,这可能会在测试期间多次发生。

我能想到几个不理想的解决方法:

  • 解析每个页面导航的日志
  • 记录到文件并稍后解析日志

两者都不理想,所以寻找最简单的方法。

这个问题类似于使用 chromedriver 以编程方式在 chrome 中启用“保留日志”——但那里的答案似乎是关于通过性能日志记录来记录重定向,而不是保留导航日志。

Selenium 谷歌-chrome-devtools selenium-chromedriver

评论

0赞 Cavan Page 12/1/2017
如果登录到文件,是否可以在执行代码时不读取该文件?你能尝试这样的事情吗 stackoverflow.com/questions/4400517/......
0赞 Michał Matyjek 12/2/2017
@CavanPage是的 - 我可以这样做,这是我列出的第二个解决方法。看看是否有更简单的选择。
0赞 Cavan Page 12/2/2017
好吧,你说稍后再解析它,但我建议你可以在它仍在写入时阅读它。你说你想在执行期间解析。

答:

-1赞 chunsheng tan 10/18/2022 #1
//chromedriver,preserve log
// request postdata
ChromeOptions chromeOptions = new ChromeOptions();
//HAR
ArrayList<String> excludeSwitches = new ArrayList<>();
excludeSwitches.add("enable-automation");
chromeOptions.setExperimentalOption("excludeSwitches",excludeSwitches);
List<HarEntry> list =  har.getLog().getEntries();
for (HarEntry harEntry : list){
  HarRequest request = harEntry.getRequest();
  if(request != null){
    String requestBody = request.getPostData().getText();
    System.out.println("requestBody:" + requestBody);
  }
}
0赞 Berkay Kirmizioglu 2/24/2023 #2

要在 chromedriver 中启用“保留日志”功能,您可以在 chromedriver 选项中使用 loggingPrefs 功能。此功能允许您指定要捕获的日志消息类型以及将其发送到何处。

我将举例说明如何在 Python 中启用“保留日志”功能: 从 Selenium 导入 web驱动程序

options = webdriver.ChromeOptions()
options.add_argument('--enable-logging')
options.add_argument('--v=1')
capabilities = {'loggingPrefs': {'browser': 'ALL'}}

driver = webdriver.Chrome(options=options, desired_capabilities=capabilities)

在此示例中,我们将创建一个新的 ChromeOptions 对象,并添加两个参数:和 。这些参数会在 Chrome 浏览器中启用详细日志记录,这是捕获所有日志消息所必需的。--enable-logging--v=1

我们还将创建一个 loggingPrefs 功能对象,并将浏览器键设置为“ALL”。这会告诉 chromedriver 捕获所有日志消息,包括网络请求和 JavaScript 控制台消息。

最后,我们将 options 和 capabilities 对象都传递给构造函数,构造函数会创建一个具有所需选项的新 ChromeDriver 实例。webdriver.Chrome()

请注意,即使启用了“保留日志”功能,在导航页面时仍会清除日志消息。但是,您可以在测试期间随时使用该方法检索所有捕获的日志消息。driver.get_log('browser')

0赞 MortenB 6/19/2023 #3

从 v4.0 开始的 Selenium 有一个服务参数,只需设置, 如果文件已存在,它将追加。log_path

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
options = webdriver.ChromeOptions()
options.add_argument('--enable-logging')
options.add_argument('--v=1')
s = ChromeService(log_path="./chromedriver.log")
driver = webdriver.Chrome(service=s, options=options)

上述desired_capabilities在 selenium v4.10 for python 中删除。 但它没有保留日志,而是在每次初始化时覆盖。