C# 从 python 启动 chromedriver 并在 c# 中像驱动程序一样使用它

C# start chromedriver from python and use it in c# like driver

我只需要像这样从 python 启动 chromedriver :

import undetected_chromedriver as uc
from selenium import webdriver

options = webdriver.ChromeOptions() 
driver = uc.Chrome()
driver.get('https://accounts.stockx.com/login')


print("Chrome started")

我的 C# 程序有 100000 行代码,没有时间将所有内容重写为 C#。

我必须像上面显示的代码一样打开 chromedriver。我需要从 C# 代码访问这个 chromedriver。我该怎么做?

在 C# 中,我就是这样做的:

ChromeDriver driver;
var chromeOptions = new ChromeOptions();
driver = new ChromeDriver(chromeDriverService,chromeOptions);

问题是:如何通过 python 启动 chromedriver,然后从 c# 访问该驱动程序? 我需要它,因为来自 python 的 chromedriver 无法被验证码检测到。 感谢您的进步!

我想我可能有一个基于 Selenium: Attach to an Existing Chrome Browser with C# 的解决方案,它将 WPF 应用程序启动的 Google Chrome 浏览器连接到另一个进程中启动的 Web 驱动程序。

来自博客post:

MainWindow:

private void LaunchBrowser_Click(object sender, RoutedEventArgs e)
{
    Process proc = new Process();
    proc.StartInfo.FileName = @"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe";
    proc.StartInfo.Arguments = "https://www.intellitect.com/blog/ --new-window --remote-debugging-port=9222 --user-data-dir=C:\Temp";
    proc.Start();
}

The [--remote-debugging-port argument] is critical. It tells Chrome which port to use for remote debugging...

...

ChromeOptions options = new ChromeOptions();
options.DebuggerAddress = "127.0.0.1:9222";

We point Selenium at a debugger address (port included). Now, we can “attach” to the Chrome instance launched by our desktop app.

这为我们提供了在 Python 中尝试的基本模式。

  1. (Python) 启动 Chrome 驱动程序并使用 [=45= 在参数中指定 --remote-debugging-port ]选项:

    options = webdriver.ChromeOptions()
    options.add_argument("--remote-debugging-port=9222")
    #                   Port number to use in C#: ^^^^ (change to suit your needs)
    driver = webdriver.Chrome(chrome_options=options)
    
  2. (C#) 初始化另一个 ChromeDriver 对象,并使用与 --remote-debugging-port 相同的端口号指定调试器地址在 Python:

    var options = new ChromeOptions()
    {
        DebuggerAddress = "127.0.0.1:9222"
        //  port number from Python: ^^^^
    };
    
    var driver = new ChromeDriver(options);
    

我没有尝试过,但它遵循相同的基本步骤。老实说,这是一个盲目的猜测,所以如果它不起作用,请随时告诉我或问一个 follow-up 问题。