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

Как правильно подключить прокси в Selenium на Python?

Есть код на python для парсинга, использую selenium, купил недавно прокси с proxy 6, но не получается подключить их, каждый раз когда запускаю скрипт, выдает ошибку на странице, что я делаю не так?
options = webdriver.ChromeOptions()
options.add_argument('start-maximized')
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument(f'--proxy-server=https://{login}:{password}@45.145.57.201:13231')
driver = webdriver.Chrome(options=options)


Ошибка, которую выдает браузер:

652c29513e31e115584577.png
  • Вопрос задан
  • 3809 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
Maksim_64
@Maksim_64
Data Analyst
https://www.zenrows.com/blog/selenium-proxy#proxy-...
там есть код для proxy которые требуют аутентификацию. Я так понял твой требует и без нее не работает.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
zax2002
@zax2002
Ещё можно сделать без selenium-wire. При открытии браузера загружается расширение, которое настраивает прокси с аутентификацией
import tempfile
import contextlib
from urllib.parse import urlparse

from selenium import webdriver
from selenium.webdriver.chrome.options import Options


class ChromeExtended(webdriver.Chrome):
    def __init__(self, *args, options=None, proxy=None, **kwargs):
        options = options or Options()

        if proxy:
            context = tempfile.TemporaryDirectory()
        else:
            context = contextlib.nullcontext()

        with context as extensionDirpath:
            self._setupProxy(extensionDirpath, proxy, options)

            super().__init__(*args, options=options, **kwargs)

    def _setupProxy(self, extensionDirpath, proxy, options):
        if not proxy:
            return

        parsedProxy = urlparse(proxy)

        manifest_json = '{"version":"1.0.0","manifest_version":2,"name":"Chrome Proxy","permissions":["proxy","tabs","unlimitedStorage","storage","<all_urls>","webRequest","webRequestBlocking"],"background":{"scripts":["background.js"]},"minimum_chrome_version":"22.0.0"}'
        background_js = 'var e={mode:"fixed_servers",rules:{singleProxy:{scheme:"%s",host:"%s",port:parseInt(%s)},bypassList:["localhost"]}};chrome.proxy.settings.set({value:e,scope:"regular"},(function(){})),chrome.webRequest.onAuthRequired.addListener((function(e){return{authCredentials:{username:"%s",password:"%s"}}}),{urls:["<all_urls>"]},["blocking"]);' \
            % (parsedProxy.scheme, parsedProxy.hostname, parsedProxy.port, parsedProxy.username, parsedProxy.password)

        with open(f"{extensionDirpath}/manifest.json", "w", encoding="utf8") as f:
            f.write(manifest_json)
        with open(f"{extensionDirpath}/background.js", "w", encoding="utf8") as f:
            f.write(background_js)

        options.add_argument(f"--load-extension={extensionDirpath}")

b = ChromeExtended(proxy="http://aaaaaaa:aaaaaa@100.100.100.100:8888")
b.get("https://www.whatismyip.com/")
input()
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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