如何在静默模式下执行Selenium Chrome WebDriver

本文关键字:执行 Selenium Chrome WebDriver 模式 静默 | 更新日期: 2023-09-27 18:30:38

使用 Chrome Selenium WebDriver 时,它将在服务器启动时输出诊断输出:

在端口 9515 上启动 ChromeDriver (v2.0)

我不想看到这些消息,如何抑制它们?

我这样做

ChromeOptions options = new ChromeOptions();
options.AddArgument("--silent");
IWebDriver Driver = new ChromeDriver(options);

但诊断输出不会抑制。

如何在静默模式下执行Selenium Chrome WebDriver

我只是这样做

ChromeOptions options = new ChromeOptions();
options.AddArgument("--log-level=3");
IWebDriver driver = new ChromeDriver(options);

好问题,但是,我不知道你从哪里得到.AddArgument("--silent");的东西,因为这是Chrome的命令行开关,而不是ChromeDriver。此外,无论如何都没有一个名为--silent的Chrome开关。

在命名空间OpenQA.Selenium.Chrome下,有一个名为 ChromeDriverService 的类,该类具有默认为 false 的属性SuppressInitialDiagnosticInformation该类。基本上你可能想做的是创建 ChromeDriverService并将其传递给ChromeDriver的构造函数。请参阅此处的文档。

下面是禁止显示 ChromeDrive 诊断输出的 C# 代码。

ChromeOptions options = new ChromeOptions();
ChromeDriverService service = ChromeDriverService.CreateDefaultService();
service.SuppressInitialDiagnosticInformation = true;
IWebDriver driver = new ChromeDriver(service, options);

编辑:ChromeDriver(不是Chrome)有一个命令行参数--silent,它应该可以工作。 SuppressInitialDiagnosticInformation .NET 绑定正是这样做的。但是,它似乎只抑制了某些消息。

这是一张封闭的铬司机票:问题 116: 如何禁用 Chrome 驱动程序中的诊断消息和日志文件?

对我来说,

以前的答案都没有帮助,我的解决方案是:

ChromeDriverService service = ChromeDriverService.CreateDefaultService(driverLocation);
service.SuppressInitialDiagnosticInformation = true;
service.HideCommandPromptWindow = true;
var driver = new ChromeDriver(service, options);
对我来说

唯一有效的

   selenium-chrome-driver-2.48.2.jar
   chromedriver 2.20
   selenium-java-2.48.2.jar

   ChromeOptions options = new ChromeOptions();
   System.setProperty("webdriver.chrome.args", "--disable-logging");
   System.setProperty("webdriver.chrome.silentOutput", "true");
   driver = new ChromeDriver(options);

尝试此代码,它将隐藏带有"无头"参数的浏览器,但Chrome版本应>58

(甚至你可以隐藏命令提示符窗口)

    IWebDriver driver;
ChromeOptions options = new ChromeOptions();
options.AddArguments("--disable-extensions");
options.AddArgument("test-type");
options.AddArgument("--ignore-certificate-errors");
options.AddArgument("no-sandbox");
options.AddArgument("--headless");//hide browser
ChromeDriverService service = ChromeDriverService.CreateDefaultService(@"chromedriverExepath'");
service.SuppressInitialDiagnosticInformation = true;
//service.HideCommandPromptWindow = true;//even we can hide command prompt window (with un comment this line)  
options.BinaryLocation = @"C:'Program Files (x86)'Google'Chrome'Application'chrome.exe";
driver = new ChromeDriver(service, options);
driver.Manage().Window.Maximize();
driver.Navigate().GoToUrl("https://www.example.com");

对于任何发现自己想要Java解决方案的人来说,这里有一个线程:

Selenium chromedriver 禁用日志记录或重定向它 java

只在下面添加System.setProperty("webdriver.chrome.silentOutput", "true");

输出:-ChromeDriver 已成功启动。2022 年 6 月 28 日 下午 10:38:55 org.openqa.selenium.remote.Protocol握手创建会话信息:检测到的方言:W3C

要在完全静默模式下在控制台中运行带有Selenium的Chrome浏览器,您应该使用以下代码片段:

options = Options()
options.headless = True
options.add_experimental_option("excludeSwitches", ["enable-logging"])

该技巧将抑制来自Selenium驱动程序或浏览器本身的任何控制台消息,包括一开始DevTools listening on ws://127.0.0.1的第一条消息。

这段代码对我来说很好用:

public static IWebDriver Driver { set; get; }
-----
Driver = CreateBrowserDriver();
////////////// Create Driver
private static IWebDriver CreateBrowserDriver()
{
    try
    {
        var options = new OpenQA.Selenium.Chrome.ChromeOptions();
        options.AddArguments("--disable-extensions");
        options.AddArgument("--headless"); // HIDE Chrome Browser
        var service = OpenQA.Selenium.Chrome.ChromeDriverService.CreateDefaultService();
        service.HideCommandPromptWindow = true; // HIDE Chrome Driver
        service.SuppressInitialDiagnosticInformation = true;
        return new OpenQA.Selenium.Chrome.ChromeDriver(service, options);
    }
    catch
    {
        throw new Exception("Please install Google Chrome.");
    }
}
////////////// Exit Driver
public static void ExitDriver()
{
    if (Driver != null)
    {
        Driver.Quit();
    }
    Driver = null;
    try
    {
        // Chrome
        System.Diagnostics.Process.GetProcessesByName("chromedriver").ToList().ForEach(px => px.Kill());
    }
    catch { }
}