Как настроить прокси socks5 с авторизацией в Selenium? - PullRequest
2 голосов
/ 06 июля 2019

Я настраиваю прокси так:

proxy_opts = Proxy()
proxy_opts.proxy_type = ProxyType.MANUAL
proxy_opts.socks_proxy = 'socks5://localhost:9050'
proxy_opts.socks_username = 'foo'
proxy_opts.socks_password = 'bar'
capabilities = DesiredCapabilities.CHROME
proxy_opts.add_to_capabilities(capabilities)
options = Options()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
driver = webdriver.Chrome(executable_path='libs/chromedriver.exe', options=options, desired_capabilities=capabilities)

Трассировка (последний последний вызов):

File "registration.py", line 249, in 
registration()
File "registration.py", line 182, in registration
driver = webdriver.Chrome(executable_path='libs/chromedriver.exe', options=options, desired_capabilities=capabilities)
File "C:\Python37\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 81, in __init__
desired_capabilities=desired_capabilities)
File "C:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 157, in __init__
self.start_session(capabilities, browser_profile)
File "C:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "C:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: cannot parse capability: proxy
from invalid argument: Specifying 'socksProxy' requires an integer for 'socksVersion'

Другой вариант:

options.add_argument('--proxy-server=socks5://{}@localhost:9050'.format('foo:bar'))
driver = webdriver.Chrome(executable_path='libs/chromedriver.exe', options=options)

В этомВ этом случае ошибок нет, но при запуске браузера сразу «Не удается загрузить страницу».

Опция без авторизации работает (но меня это не устраивает).

После этогоЯ пытаюсь сделать это для Firefox

proxy = '127.0.0.1:9050'
capabilities = DesiredCapabilities.FIREFOX
capabilities['proxy'] = {'proxyType': 'MANUAL', 
                         'socksProxy': proxy, 
                         'socksVersion': 5}
# capabilities['proxy']['socksUsername'] = 'foo')
# capabilities['proxy']['socksPassword'] = 'bar')
driver  = webdriver.Firefox(desired_capabilities=capabilities, executable_path='libs/geckodriver.exe')

С socksUsername и socksPassword у меня есть ошибка: Traceback (последний вызов был последним):

  File "registration.py", line 275, in <module>
    registration('FIREFOX')
  File "registration.py", line 198, in registration
    driver  = webdriver.Firefox(desired_capabilities=capabilities, executable_path='libs/geckodriver.exe')
  File "C:\Python37\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 174, in __init__
    keep_alive=True)
  File "C:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "C:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "C:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidArgumentException: Message: Invalid proxy configuration entry: socksPassword

Без socksUsername и socksPassword он работает хорошо, какэто хром.Мне все равно, где решить эту проблему: Chrome или Firefox, мне просто нужно решение.

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