Как использовать аутентифицированный прокси-сервер в селеном хромированном ривере?

После поиска в течение многих часов я начинаю думать, что это невозможно.

Мне нужно запустить Chrome через селен, используя разные аутентифицированные (не общедоступные) прокси для каждого прогона.

PROXY_IP = "<some IP address>"
UID = "<the user id>"
PWD = "<the password">

options = webdriver.ChromeOptions()
options.add_argument("--proxy-server=%s:%[email protected]%s" % (UID,PWD,PROXY_IP))

driver = webdriver.Chrome(executable_path=".\\driver\\chromedriver.exe",
                          chrome_options=options)
driver.get("<site URL>")

Chrome запустится и отобразит сообщение об ошибке:

This webpage is not available
ERR_NO_SUPPORTED_PROXIES

Если я использую общедоступный прокси, не требующий аутентификации, подобный этому...

PROXY_IP = "<public proxy IP address>"

options = webdriver.ChromeOptions()
options.add_argument("--proxy-server=%s" % PROXY_IP)

driver = webdriver.Chrome(executable_path=".\\driver\\chromedriver.exe",
                          chrome_options=options)
driver.get("<site URL>")

... он работает очень хорошо и отображает сайт при использовании прокси.

Я также попробовал вариант с http:// перед идентификатором пользователя:

options.add_argument("--proxy-server=http://%s:%[email protected]%s" % (UID,PWD,PROXY_IP))

Тот факт, что я искал всюду и не нашел решения, заставляет меня думать, что никто не может существовать.

Я нашел это, но я не могу понять:

прокси аутентификации хронинга селена

Не уверен, что делать или должен делать browswermob-proxy или как реализовать и протестировать в Python. Я ненавижу нагромождение решений для групповой помощи, если они абсолютно необходимы.

Ответ 1

Я проверил большинство решений в Интернете, и ни одна из них не проверяет подлинность с помощью требуемых возможностей chrome/firefox. Проверьте эту ссылку: https://github.com/webdriverio/webdriverio/issues/324. Наконец, временным решением является белый список вашего IP-адреса с прокси-провайдером.

Ответ 2

попробовав множество решений, которые на самом деле не работали должным образом, мне наконец удалось установить прокси-сервер с проверкой подлинности, используя предложенное расширение из предыдущих ответов. что вам нужно сделать, это ввести эту ссылку:

http://crxextractor.com/ и вставьте этот URL: https://www.crx4chrome.com/crx/1446/

Это позволит вам загрузить расширение в виде файла .crx без его установки. чем я использовал этот код:

proxy = {'address': 'pr.oxylabs.io:7777',
     'username': 'USERNAME',
     'password': 'PASSWORD'}

capabilities = dict(DesiredCapabilities.CHROME)
capabilities['proxy'] = {'proxyType': 'MANUAL',
                         'httpProxy': proxy['address'],
                         'ftpProxy': proxy['address'],
                         'sslProxy': proxy['address'],
                         'noProxy': '',
                         'class': "org.openqa.selenium.Proxy",
                         'autodetect': False,
                         'socksUsername': proxy['username'],
                         'socksPassword': proxy['password']}

options = webdriver.ChromeOptions()
options.add_extension("./extension_2_0_0_0.crx")
driver = webdriver.Chrome(executable_path=CHROME_PATH, desired_capabilities=capabilities, chrome_options=options)

Ответ 4

Я не мог найти решение для хрома. Мы не можем добавлять расширения с опцией headless. Я использую Heroku с Chrome-buildpack. Есть следующие варианты

  1. Используйте xvfb вместо опций без головы и установите расширение
  2. Используйте локальный прокси-сервер пересылки, который перенаправляет трафик на проверенный прокси; мы можем использовать Squid, mitProxy или что-то вроде proxy-login-automator

Вместо этого обходного пути я переключился на Firefox, где смог заполнить имя пользователя и пароль во всплывающем окне проверки подлинности прокси. Как указано ниже. Следующий код для Ruby с использованием Capybara. Вы должны быть в состоянии сделать что-то подобное на своей платформе


page.driver.browser.switch_to.alert.send_keys('proxy-username' + Selenium::WebDriver::Keys::KEYS[:tab] + 'my-password')
page.driver.browser.switch_to.alert.accept

Ответ 5

Я пробовал много времени, чтобы сделать то же самое.

Chrome использует только прокси-сервер ОС, где он установлен. Вы можете проверить его, перейдя в options- > find: proxy → изменить настройки прокси-сервера

Итак, без дополнительных аддонов и настройки этих аддонов вы не сможете этого сделать.

Или вы можете изменить настройки прокси-сервера ОС - это намного проще.

Также вы можете использовать phantomjs - он имеет тот же движок (WebKit), что и хром. используя что-то вроде этого:

String PROXY = proxyIP + ":" + proxyPort;
String proxyAuth= proxyUser + ":" + proxyPass;
        OpenQA.Selenium.Proxy proxy = new OpenQA.Selenium.Proxy();
                    proxy.HttpProxy = PROXY;
                    proxy.FtpProxy = PROXY;
                    proxy.SslProxy = PROXY;
                    proxy.SocksProxy = PROXY;

    var serviceJS = PhantomJSDriverService.CreateDefaultService(phantomPath);
    serviceJS.AddArguments("--proxy=" + PROXY, "--proxy-type=http", "--proxy-auth=" + proxyAuth);

Ответ 6

Это временное решение может работать в начальном состоянии: Код находится в Python: Загрузите плагин сначала из магазина chrome plugin: Proxy-Auto-Auth_v2.0.crx

        options = webdriver.ChromeOptions()
        options.add_extension("./Proxy-Auto-Auth_v2.0.crx")) #this will provide you a window to enter user name and proxy 
        driver = webdriver.Remote(command_executor=selenium_server,desired_capabilities=options.to_capabilities())

        or 

        driver = webdriver.Chrome(chrome_options=options)

Ответ 7

Для использования прокси с auth в python selenium вы можете использовать seleniumwire.

Во-первых, установите его с помощью pip install selenium-wire

Затем импортируйте веб-драйвер из селена вместо селена

from seleniumwire import webdriver
options = {
    'proxy': {
        'http': 'http://username:[email protected]:port', 
        'https': 'https://username:[email protected]:port',
        'no_proxy': 'localhost,127.0.0.1' # excludes
    }
}
browser = webdriver.Chrome(path_to_driver, seleniumwire_options=options)

Теперь вы можете использовать свой экземпляр браузера точно так же, как selenium: browser.get('https://api.ipify.org') и так далее...