如何在selenium Python中设置SOCKS5代理并进行Chrome认证?

xj3cbfub  于 2022-12-26  发布在  Python
关注(0)|答案(5)|浏览(915)

我尝试使用PIA提供的SOCKS 5代理(https://www.privateinternetaccess.com)。我在他们的网站上为SOCKS 5生成了用户/通行证,但我无法使用此信息,因为我不知道将其放在哪里。我尝试使用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
ryoqjall

ryoqjall1#

我也在这里犯了难。我也想在 selenium 的chrome webdriver中使用auth代理。我试过使用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代码说需要socksProxy密钥,但是目前selenium是不支持socksProxy的,请看selenium代码。
所以我只好选择别的办法:

  • 使用export http_proxy=http://username@pass:host:port在路径中设置http_proxy
  • use extension to hack
    UPDATE最后,我使用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没有授权。

cxfofazt

cxfofazt2#

以防有人发现这个...
我尝试使用selenium连接socks 5代理,并认为问题是代理需要用户/传递身份验证,由于我使用的是chromedriver,它无法工作,因为chrome本身不支持这一点。
尝试连接一个不需要身份验证的socks 5代理,或者找到一个支持这个的驱动程序-不知道这可能是什么。

amrnrhlw

amrnrhlw3#

您可以尝试以下替代方法:-

  • 在您的.bashrc集合proxy中,chrome本身将使用:-
export http_proxy="xGeneratedUser:GeneratedPass@proxy-nl.privateinternetaccess.com:1080"

export https_proxy="xGeneratedUser:GeneratedPass@proxy-nl.privateinternetaccess.com:1080"

在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
hrysbysz

hrysbysz4#

    • selenium 元素.网络驱动程序. chrome 元素.网络驱动程序**
WebDriver(executable_path='chromedriver', port=0, chrome_options=None, service_args=None, desired_capabilities=None, service_log_path=None)

参数:

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

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

zf9nrax1

zf9nrax15#

是的,试试这个:
var客户端=需要('webdriverio').远程({主机:“用户名:密码@127.0.0.1”端口:1234,所需功能:{浏览器名称:'chrome' } })

相关问题