Задать вопрос
@MIX89

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

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...

2. 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);


3. Просит вручную вводить логин и пароль от прокси
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 нужно генерить сертификаты, подписывать в специальном формате файл и надеется что хром текущей версии будет читать его.
  • Вопрос задан
  • 21 просмотр
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы