【问题标题】:How to start ChromeDriver in headless mode如何在无头模式下启动 ChromeDriver
【发布时间】:2017-12-21 05:01:12
【问题描述】:

我想试试 headless chrome,但我遇到了这个问题,我无法在 headless 模式下启动驱动程序。我在关注google documentation。我错过了什么吗?代码执行卡在var browser = new ChromeDriver();

这是我的代码:

var chromeOptions = new ChromeOptions
{
    BinaryLocation = @"C:\Users\2-as Aukstas\Documents\Visual Studio 2017\Projects\ChromeTest\ChromeTest\bin\Debug\chromedriver.exe",
    DebuggerAddress = "localhost:9222"
};

chromeOptions.AddArguments(new List<string>() {"headless", "disable-gpu" });

var browser = new ChromeDriver(chromeOptions);


browser.Navigate().GoToUrl("https://stackoverflow.com/");
Console.WriteLine(browser.FindElement(By.CssSelector("#h-top-questions")).Text);

【问题讨论】:

  • 你的chromedriver.exe 版本是什么?
  • 我的版本是2.30.0。从 NuGet 得到它
  • BinaryLocation 应该指向 Chrome(浏览器)的 exe,而不是 chromedriver.exe
  • 是的,你是对的。但还是没有解决问题

标签: c# selenium selenium-chromedriver


【解决方案1】:

更新
Chrome 60 版已经发布,所以您只需通过 Nuget 下载 Chromdriver 和 Selenium 并使用这个简单的代码,一切都会像魅力一样运行。太棒了。

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

...



var chromeOptions = new ChromeOptions();
chromeOptions.AddArguments("headless");

using (var browser = new ChromeDriver(chromeOptions))
{
  // add your code here
}

日期

在 Chrome 60 正式版发布之前,有一个解决方案。您可以下载 Chrome Canary 并使用 headless。安装后将 BinaryLocation 设置为指向 chrome canary 还注释掉 DebuggerAddress 行(它会强制 chrome 超时):

var chromeOptions = new ChromeOptions
{
    BinaryLocation = @"C:\Users\2-as Aukstas\AppData\Local\Google\Chrome SxS\Application\chrome.exe",
    //DebuggerAddress = "127.0.0.1:9222"
};

chromeOptions.AddArguments(new List<string>() { "no-sandbox", "headless", "disable-gpu" });

var _driver = new ChromeDriver(chromeOptions);

【讨论】:

  • Chromedriver需要哪个nuget包,有几个——Chromium.ChromeDriverWebDriverChromeDriverSelenium.Webdriver.ChromeDriver
  • Selenium.WebDriver.ChromeDriver
  • 为什么要使用新列表?只需使用options.AddArguments("headless");
  • 是的,这是正确的。更新前需要其他参数
  • 仅供参考,WebDriver dll 的命名空间是 OpenQA(这对我来说并不明显),因此您将添加“使用 OpenQA.Selenium.Chrome;”到代码文件的顶部。
【解决方案2】:

对于没有获得 ChromeDriver 参考的您。 使用此步骤:

  1. 从这里下载 dll:http://seleniumtestings.com/selenium-download/

  2. 解压,您应该会看到:Selenium.WebDriverBackedSelenium.dll、ThoughtWorks.Selenium.Core.dll、WebDriver.dll 和 WebDriver.Support.dll

  3. 通过“添加引用”添加这些文件

现在你可以使用它了:

String url = "http://www.google.com";
var chromeOptions = new ChromeOptions();
chromeOptions.AddArguments(new List<string>() {
    "--silent-launch",
    "--no-startup-window",
    "no-sandbox",
    "headless",});

var chromeDriverService = ChromeDriverService.CreateDefaultService();
chromeDriverService.HideCommandPromptWindow = true;    // This is to hidden the console.
ChromeDriver driver = new ChromeDriver(chromeDriverService, chromeOptions);
driver.Navigate().GoToUrl(url);   

====

如果运行后仍然遇到没有 ChromeDriver.exe 文件的错误,请尝试通过 nuget 添加 Selenium.WebDriver.ChromeDriver、WebDriver.ChromeDriver、WebDriver.ChromeDriver.win32、Selenium.Chrome.WebDriver。

【讨论】:

  • 提供的链接已损坏。
  • 请转到下面我的其他选择。
【解决方案3】:

作为替代:

  • 通过 NuGet 添加 2 个库,如下图所示。

  • 试试下面的代码:

    String url = "http://www.google.com";
    var chromeOptions = new ChromeOptions();
    chromeOptions.AddArguments(new List<string>() { "headless" });
    
    var chromeDriverService = ChromeDriverService.CreateDefaultService();
    ChromeDriver driver = new ChromeDriver(chromeDriverService, chromeOptions);
    driver.Navigate().GoToUrl(url);
    

【讨论】:

    【解决方案4】:

    您正在运行什么操作系统?我在 developers.google.com/web/updates/2017/04/headless-chrome 上看到,在 Chrome 60 之前,无头在 Windows 上不可用。

    【讨论】:

    • Windows 10。这就回答了...... :(
    • @EvaldasB - 如果回答您的问题,请您接受。谢谢
    【解决方案5】:

    下面我给出了如何为 firefox 和 chrome 浏览器设置 headless 为 true。

    FirefoxOptions ffopt = new FirefoxOptions();
    FirefoxOptions option = ffopt.setHeadless(true);
    WebDriver driver = new FirefoxDriver(option);
    
    
    ChromeOptions coptions = new ChromeOptions();
    ChromeOptions options = coptions.setHeadless(true);
    WebDriver driver = new ChromeDriver(options);
    

    【讨论】:

    • 看起来这段代码是用Java编写的。问题是针对 C# 的。 C# 的 ChromeDriver 类中没有 setHeadless() 方法(或等效方法)。
    猜你喜欢
    • 2014-12-31
    • 2020-03-13
    • 2018-08-06
    • 1970-01-01
    • 2023-01-27
    • 2023-03-31
    • 2017-12-09
    • 1970-01-01
    • 2019-09-07
    相关资源
    最近更新 更多