无法为 Selenium Webdriver C# 设置 ChromeOptions

Unable to set ChromeOptions for Selenium Webdriver C#

我正在使用 Selenium chrome 驱动程序打开 URLs 并且我正在为每个 URL 创建新的驱动程序实例。我正在通过 ChromeOptions 为每个 URL 分配端口号。

正如我之前提到的,我正在为每个 URL 创建一个新的端口号。在第一次迭代期间打开端口并正确加载 URL 但在第一次迭代后新端口未打开。我已经在命令提示符下使用 netstat -an 验证了端口状态。那里只列出了我的第一个端口号。

因此,当断点到达这行代码时 driver = new ChromeDriver(chromeService, m_Options); 一分钟内没有任何反应,并且由于无法连接该端口而出现超时错误。

private static List<int> processIdList = new List<int>();
IWebDriver driver;
foreach (var url in urls)
{

  int portno = GetAvailablePortNumber(); 
  ProcessStartInfo pcsInfo = new ProcessStartInfo();
  pcsInfo.FileName = "C:\Program Files\Google\Chrome\Application\chrome.exe"
  pcsInfo.WorkingDirectory = "C:\Program Files\Google\Chrome\Application\chrome.exe"
  pcsInfo.Arguments =  = "--new-window --remote-debugging-port=portno --disable-fre --no-first-run --no-default-browser-check --user-data-dir=C:\SeleniumApps\WebLauncherTool\bin\Debug\ChromeUser\portno"
  
  pcsInfo.LoadUserProfile = true;
  Process process = new Process();
  process.StartInfo = pcsInfo;
  
  if (process.Start())
  {
      processId = process.Id;
      processIdList.Add(processId);
  }
    
  ChromeDriverService chromeService = ChromeDriverService.CreateDefaultService();
  chromeService.HideCommandPromptWindow = true;
  ChromeOptions m_Options = new ChromeOptions();
  m_Options.AddArgument("--disable-extensions");
  m_Options.DebuggerAddress = $"localhost:{portno}";
  driver = new ChromeDriver(chromeService, m_Options);
  driver.Navigate().GoToUrl(url);

}

我不明白为什么端口没有打开。 有人可以解释一下吗?

启动 chrome 驱动程序会话时的默认行为是:

  1. Chromedriver 进程在一些空闲端口上启动。
  2. Chromedriver 进程使用 --remote-debugging-port=0 启动 chrome-browser 进程,这意味着 一些空闲端口
  3. Chromedriver 进程与 chrome-browser 进程交互

提供调试器地址

当我们定义DebuggerAddress时,这意味着:

  1. Chromedriver 进程在一些空闲端口上启动。
  2. Chromedriver 进程 请勿启动 chrome-browser 进程,但会尝试通过提供的 DebuggerAddress.
  3. 进行连接

提供--remote-debugging-port

当我们定义--remote-debugging-port时,这意味着:

  1. Chromedriver 进程在一些空闲端口上启动。
  2. Chromedriver 进程在端口=--remote-debugging-port
  3. 上启动 chrome-browser 进程

提供Chromedriver服务端口

  1. Chromedriver 进程在端口=chrome驱动程序服务端口.
  2. 上启动
  3. Chromedriver 进程使用 --remote-debugging-port=0 启动 chrome-browser 进程,这意味着 一些空闲端口
  4. Chromedriver 进程与 chrome-browser 进程交互

因此,当我们想要连接到已经启动的 --remote-debugging-port 浏览器实例时,需要提供 DebuggerAddress