如何在selenium Python中使用auth for Chrome设置SOCKS5代理?

时间:2017-04-09 22:23:56

标签: python selenium proxy selenium-chromedriver

我尝试使用PIA(https://www.privateinternetaccess.com)提供的SOCKS5代理。我在他们的网站上为SOCKS5生成了用户/通行证,但我无法使用这些信息,因为我不知道在哪里放置它。我尝试使用ChromeOptions,但它无效。

def create_browser(self, proxy):
    """
    proxy = "xGeneratedUser:GeneratedPass@proxy-nl.privateinternetaccess.com:1080"
    """
    chrome_options = webdriver.ChromeOptions()
    if proxy:
        chrome_options.add_argument("--proxy-server=socks5://" + proxy)
    try:
        self.browser = webdriver.Chrome('./chromedriver', chrome_options=chrome_options)
        self.browser.set_window_size(800, 600)
    except Exception as error:
        return False

5 个答案:

答案 0 :(得分:0)

<强> selenium.webdriver.chrome.webdriver

WebDriver(executable_path='chromedriver', port=0, chrome_options=None, service_args=None, desired_capabilities=None, service_log_path=None)

Args:

  • executable_path - 可执行文件的路径。如果使用默认值 假设可执行文件位于$ PATH
  • port - 您希望服务运行的端口,如果保留为0,则为免费 将找到港口。
  • desired_capabilities:具有非浏览器特定的字典对象 仅限功能,例如“proxy”或“loggingPref”。
  • chrome_options:这需要ChromeOptions的一个实例

您可以按照以下URL中的表格为desired_capabilities编写代理字典对象。 DesiredCapabilities - Proxy JSON Object

答案 1 :(得分:0)

您可以尝试以下方法: -

  • 在Chrome本身将使用的.bashrcproxy中: -

    export http_proxy="xGeneratedUser:GeneratedPass@proxy-nl.privateinternetaccess.com:1080"
    
    export https_proxy="xGeneratedUser:GeneratedPass@proxy-nl.privateinternetaccess.com:1080"
    
  • 否则您可以尝试使用此工具: - proxy login automator

在Windows上,对于带或不带身份验证的http / https代理,请在cmd.exe中运行以下命令之一: -

set http_proxy=http://your_proxy:your_port
set http_proxy=http://username:password@your_proxy:your_port
set https_proxy=https://your_proxy:your_port
set https_proxy=https://username:password@your_proxy:your_port

答案 2 :(得分:0)

万一有人绊倒了......

我正在尝试使用selenium连接socks5代理并且认为问题是代理需要用户/通过身份验证,并且因为我使用了chromedriver它没有用,因为chrome本身不支持这个。

尝试连接不需要auth的socks5代理或找到支持此功能的驱动程序 - 不知道这可能是哪个/那个。

答案 3 :(得分:0)

我也在这里难住。 我也想在Selenium的Chrome网络驱动程序中使用身份验证代理。 我尝试使用httpProxy或PAC,但不能使用用户名和密码。

然后我看到了socksUsernamesocksPassword,但它仍然没有用。 因为错误:

selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: cannot parse capability: proxy
from invalid argument: Specifying 'socksProxy' requires an integer for 'socksVersion'
  (Driver info: chromedriver=73.0.3683.20 (8e2b610813e167eee3619ac4ce6e42e3ec622017),platform=Mac OS X 10.14.3 x86_64)

我发现chrome code说需要使用socksProxy键,但是当前的硒不支持socksProxy see selenium code

所以我不得不选择其他方式:

更新: 最后,我使用pproxy make作为本地的代理重定向器。

# pproxy -r ${HTTP_PROXY}\#${PROXY_AUTH} -l http://:8080 -v
# 1.2.3.4:1234 is remote address:port, username and password is used auth for remote proxy.

 pproxy -r http://1.2.3.4:1234\#username:password  -l http://:8080 -v

因此,现在您无需身份验证即可连接到本地主机:8080。

答案 4 :(得分:-1)

是的,试试这个:

var client = require(&#39; webdriverio&#39;)。remote({     主持人:&#39;用户名:password@127.0.0.1'     港口:1234,     desiredCapabilities:{         browserName:&#39; chrome&#39;     } })