Как встроить прокси в ChromeDriver на C#?

Рейтинг: 0Ответов: 0Опубликовано: 20.07.2025
  1. Не работает
    ChromeOptions options = chromeDriversHelpers.GenerateChromeOptions(
        Uuid,
        userAgent,
        width,
        height,
        pixelRatio: 2,
        disableImage: true
    );
    options.AddArguments($"--proxy-server={proxyItem.IP}:{proxyItem.Port} --proxy-user={proxyItem.Login} --proxy-password={proxyItem.Password}");
    var driver = UndetectedChromeDriver.Create(
        options,
        //browserExecutablePath: 
        driverExecutablePath: chromeDriversHelpers.GetPathToChomeDriver(0),
        headless: appSettings.headless,
        commandTimeout: TimeSpan.FromSeconds(appSettings.timeoutBrowser),
        hideCommandPromptWindow: true,
        userDataDir: Path.Combine(AppSettings.CurrentDir, "browser-data", "profiles", Uuid)
    );
    driver.GoToUrl(url);

// https://jiaopucun.com/2023/03/16/set-a-proxy-for-g...

  1. ERR_NO_SUPPORTED_PROXIES
    ChromeOptions options = chromeDriversHelpers.GenerateChromeOptions(
        Uuid,
        userAgent,
        width,
        height,
        pixelRatio: 2,
        disableImage: true
    );
    options.AddArguments($"--proxy-server=\"{proxyItem.Login}:{proxyItem.Password}@{proxyItem.IP}:{proxyItem.Port}\""); 
    var driver = UndetectedChromeDriver.Create(
        options,
        //browserExecutablePath: 
        driverExecutablePath: chromeDriversHelpers.GetPathToChomeDriver(0),
        headless: appSettings.headless,
        commandTimeout: TimeSpan.FromSeconds(appSettings.timeoutBrowser),
        hideCommandPromptWindow: true,
        userDataDir: Path.Combine(AppSettings.CurrentDir, "browser-data", "profiles", Uuid)
    );
    driver.GoToUrl(url);
  1. Просит вручную вводить логин и пароль от прокси
    ChromeOptions options = chromeDriversHelpers.GenerateChromeOptions(
        Uuid,
        userAgent,
        width,
        height,
        pixelRatio: 2,
        disableImage: true
    );
    options.AddArgument($"--proxy-server=http://{proxyItem.IP}:{proxyItem.Port}");
    options.AddArgument($"--proxy-auth={proxyItem.Login}:{proxyItem.Password}");
    var driver = UndetectedChromeDriver.Create(
        options,
        //browserExecutablePath: 
        driverExecutablePath: chromeDriversHelpers.GetPathToChomeDriver(0),
        headless: appSettings.headless,
        commandTimeout: TimeSpan.FromSeconds(appSettings.timeoutBrowser),
        hideCommandPromptWindow: true,
        userDataDir: Path.Combine(AppSettings.CurrentDir, "browser-data", "profiles", Uuid)
    );
    driver.GoToUrl(url);

Эти базовые варианты не работают как я ожидаю.

Я хочу указать прокси и что бы они применились на все запросы в запущенном браузере и логин и пароль автоматически подставились, без ручного ввода.

Ожидаемое поведение. Программа запускает например 3 браузера и каждый берет свою прокси и подставляет. Все последующие запросы в каждом браузере идут через свои прокси.

Как это реализовать ?

Вариант с расширением не предлагать. В текущее время это очень трудно затратный процесс.

  1. Генерится файл с расширением.
  2. Конвертируется в crx формат, потому что сейчас в текущей последней версии не удается просто указать путь к папке с расширением
    var (tempDir, zipPath) = ChromeProxyAuthExtensionHelper.CreateProxyAuthExtension(proxyItem.IP, proxyItem.Port, proxyItem.Login, proxyItem.Password);
    //options.AddExtension(extensionPath);
    //options.AddArgument($"--load-extension=\"{tempDir}\"");
    //options.AddAdditionalOption("extensions", new[] { extensionPath });

Что бы получить crx нужно генерить сертификаты, подписывать в специальном формате файл и надеется что хром текущей версии будет читать его.

UPD: У меня вышло только так пока - 2 варианта, что работают, но хочется по нормальному.

// 1

    options.AddArgument($"--proxy-server=http://{proxyItem.IP}:{proxyItem.Port}");
    AutoItX.WinWait("Войти", "", 1);
    AutoItX.Send(proxyItem.Login);
    AutoItX.Send("{TAB}");
    AutoItX.Send(proxyItem.Password);
    AutoItX.Send("{ENTER}");
    driver.GoToUrl(url);

// 2

    options.AddArgument($"--proxy-server=http://{proxyItem.IP}:{proxyItem.Port}");
    var network = driver.Manage().Network;
    var authHandler = new NetworkAuthenticationHandler
    {
        UriMatcher = uri => true,
        Credentials = new PasswordCredentials(proxyItem.Login, proxyItem.Password)
    };
    network.AddAuthenticationHandler(authHandler);
    await network.StartMonitoring();
    driver.GoToUrl(url);
    await network.StopMonitoring();

Ответы

Ответов пока нет.