operasoftware / operachromiumdriver

OperaDriver for Chromium-based Opera releases
Other
260 stars 47 forks source link

Cannot Parse SOCKS Proxy #59

Open BookGin opened 6 years ago

BookGin commented 6 years ago

Description

The operadriver cannot parse SOCKS proxy. I try to use http proxy and it's working well.

Reproduce

#!/usr/bin/env python3
# selenium 3.14.1, Python 3.7.0, OperaDriver=2.38
from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType

options = webdriver.ChromeOptions()
options.binary_location = "/usr/bin/opera"

caps = webdriver.DesiredCapabilities.OPERA
proxy = Proxy()
proxy.proxy_type = ProxyType.MANUAL
proxy.socks_proxy = "localhost:8132"
proxy.add_to_capabilities(caps)                                                                                        

driver = webdriver.Opera(options=options, desired_capabilities=caps)
driver.get('https://example.com')

Result

Traceback (most recent call last):
  File "./launch_opera_proxy.py", line 15, in <module>
    driver = webdriver.Opera(options=options, desired_capabilities=caps)
  File "/home/username/Desktop/working/python-selenium/py3env/lib/python3.7/site-packages/selenium/webdriver/opera/webdriver.py", line 83, in __init__
    service_log_path=service_log_path)
  File "/home/username/Desktop/working/python-selenium/py3env/lib/python3.7/site-packages/selenium/webdriver/opera/webdriver.py", line 62, in __init__
    keep_alive=keep_alive)
  File "/home/username/Desktop/working/python-selenium/py3env/lib/python3.7/site-packages/selenium/webdriver/chrome/webdriver.py", line 81, in __init__
    desired_capabilities=desired_capabilities)
  File "/home/username/Desktop/working/python-selenium/py3env/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)                                                                  
  File "/home/username/Desktop/working/python-selenium/py3env/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/home/username/Desktop/working/python-selenium/py3env/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/home/username/Desktop/working/python-selenium/py3env/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: cannot parse capability: proxy
from unknown error: proxyType is 'manual' but no manual proxy capabilities were found
  (Driver info: OperaDriver=2.38 (8379e5641ac71cae6a8208a850479e7098d2bd02),platform=Linux x86_64)
BookGin commented 6 years ago

As a temporary workaround, one can add this command line argument --proxy-server=socks5://localhost:8123 into OperaOptions and it works well.

Here is a Java example:

OperaOptions options = new OperaOptions();                                      
options.setBinary("/usr/bin/opera");
options.addArguments("--proxy-server=socks5://" + socks_proxy);
desiredCapabilities.setCapability(OperaOptions.CAPABILITY, options);