我正在创建一个脚本来抓取一个网站以收集一些数据,但问题是他们在请求太多后阻止了我,但使用代理我可以发送比目前更多的请求。我已经将代理与 chrome 选项集成 --proxy-server
options.add_argument('--proxy-server={}'.format('http://ip:port'))
但我使用的是付费代理,因此它需要身份验证,如下图所示,它提供了用户名和密码的警告框
options.add_argument('--proxy-server={}'.format('http://username:password@ip:port'))
但它似乎也不起作用。我在寻找解决方案并找到了以下解决方案,我将它与 chrome 扩展 代理自动身份验证 一起使用,但没有 chrome 扩展
proxy = {'address': settings.PROXY,
'username': settings.PROXY_USER,
'password': settings.PROXY_PASSWORD}
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,
'socksUsername': proxy['username'],
'socksPassword': proxy['password']}
options.add_extension(os.path.join(settings.DIR, "extension_2_0.crx")) # proxy auth extension
但是以上都没有正常工作它似乎工作因为在上面的代码之后代理身份验证警报消失了并且当我通过谷歌搜索我的 IP 并确认它不工作时检查我的 IP。
请任何可以帮助我在 chromedriver 上验证代理服务器的人。
原文由 itsmnthn 发布,翻译遵循 CC BY-SA 4.0 许可协议
Selenium Chrome 代理身份验证
使用 Python 使用 Selenium 设置 chromedriver 代理
如果您需要使用带有 python 的代理和带有 chromedriver 的 Selenium 库,您通常使用以下代码(没有任何用户名和密码:
除非代理需要身份验证,否则它工作正常。如果代理要求您使用用户名和密码登录,它将不起作用。在这种情况下,您必须使用下面解释的更棘手的解决方案。顺便说一下,如果您从代理提供商或服务器将您的服务器 IP 地址列入白名单,它不应该询问代理凭据。
在 Selenium 中使用 Chromedriver 进行 HTTP 代理身份验证
要设置代理身份验证,我们将生成一个特殊文件并使用下面的代码将其动态上传到 chromedriver。此代码使用 chromedriver 配置 selenium 以使用需要使用用户/密码对进行身份验证的 HTTP 代理。
函数 get_chromedriver 返回可在您的应用程序中使用的已配置 selenium webdriver。此代码已经过测试并且工作正常。
详细了解 Chrome 中的 onAuthRequired 事件。