使用Python在Selenium中设置chromedriver代理授权

10

我正在使用Python和Selenium库编写测试套件。使用chromedriver,我正在使用以下代码设置代理:

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server=%s' % hostname + ":" + port)
global driver
driver = webdriver.Chrome(chrome_options=chrome_options)

当代理不需要身份验证时,这很好用。但是,如果代理要求您使用用户名和密码进行登录,则无法正常工作。使用add_argument或其他方法向chromedriver传递代理身份验证信息的正确和适当方法是什么?

它与以下内容不同:如何在Selenium Java中设置Chrome的代理设置

鉴于:

  1. 这是另一种语言。
  2. 这是Firefox,而不是Chrome。
  3. --proxy-server = http://user:password@proxy.com:8080 不起作用。

https://dev59.com/Jl0a5IYBdhLWcg3wVHbU - timbre timbre
@KirilS。根据那个话题所说,我需要一种在Chrome中完成这个任务的扩展程序? - Jorge
主要内容是,与Firefox不同,Chrome使用操作系统代理(而不是自己的代理),因此您的选项是:1-在测试之前使用正确的代理设置设置操作系统(对于Windows来说,这是一个很好的解决方法,您可以为Selenium测试设置一个特殊用户);2-从测试中设置操作系统代理设置(可能太复杂);3-使用特殊的插件,允许您随时更改代理设置。 - timbre timbre
@KirilS。在Unix系统上,我遇到了以下问题: 消息:未知错误:无法处理扩展#1 来自未知错误:无效的公钥长度 - Jorge
有关这个的任何更新吗?这让我很烦恼。它可以在Chrome中完成吗? - Toolkit
@ 工具包 检查一下我刚才发布的答案,看看是否适用于你。 - crookedleaf
1个回答

3

使用DesiredCapabilities。我一直在成功地使用以下代理身份验证:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

proxy = {'address': '123.123.123.123:2345',
         'username': 'johnsmith123',
         'password': 'iliketurtles'}


capabilities = dict(DesiredCapabilities.CHROME)
capabilities['proxy'] = {'proxyType': 'MANUAL',
                         'httpProxy': proxy['address'],
                         'ftpProxy': proxy['address'],
                         'sslProxy': proxy['address'],
                         'noProxy': '',
                         'class': "org.openqa.selenium.Proxy",
                         'autodetect': False}

capabilities['proxy']['socksUsername'] = proxy['username']
capabilities['proxy']['socksPassword'] = proxy['password']

driver = webdriver.Chrome(executable_path=[path to your chromedriver], desired_capabilities=capabilities)

编辑:很遗憾,自从这篇文章发表以来,由于Selenium或Chrome的更新之一,该方法不再起作用。目前为止,我不知道其他解决方案,但如果我找到任何信息,我将进行实验并更新这个方法。


2
第5行有一个拼写错误,username被写成了usernmae - Stack
3
这种方法无法与需要身份验证的代理和chromedriver一起使用。 - Stack
@AlexeyTrofimov,很不幸的是,自从这篇文章发布以来,由于Selenium或Chrome的更新之一,这种方法似乎已经不再起作用。目前为止,我不知道其他的解决方案,但如果我找到任何信息,我会进行实验并进行更新。 - crookedleaf
1
@Stack 标记你,以便你也能收到通知。 - crookedleaf
3
很遗憾,不行了。由于代码已更改且可能不会恢复,因此可能不会再有了。但是,可以通过编写Chrome扩展程序来实现解决方法。这里有一个链接详细介绍了如何做。请查看标题为“使用Python在Selenium中设置Chromedriver代理身份验证的HTTP代理身份验证”的第二个部分。 - crookedleaf
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接