Как использовать аутентифицированный прокси-сервер в селеном хромированном ривере?
После поиска в течение многих часов я начинаю думать, что это невозможно.
Мне нужно запустить 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)
Ответ 3
Я закончил установку расширения, которое может установить аутентифицированную информацию прокси через API прокси Chrome.
Вот сообщение о том, как это сделать
Ответ 4
Я не мог найти решение для хрома. Мы не можем добавлять расширения с опцией headless
. Я использую Heroku с Chrome-buildpack. Есть следующие варианты
- Используйте
xvfb
вместо опций без головы и установите расширение - Используйте локальный прокси-сервер пересылки, который перенаправляет трафик на проверенный прокси; мы можем использовать 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')
и так далее...