我正在创建一个脚本,抓取一个网站收集一些数据,但问题是,他们阻止了我后,太多的请求,但使用代理,我可以发送更多的请求,然后目前我这样做。我已经集成了代理与 chrome 选项--proxy-server
options.add_argument('--proxy-server={}'.format('http://ip:port'))
但我使用的是付费代理,所以它需要身份验证,并作为下面的屏幕截图,它给出了用户名和密码的警报框
然后我尝试使用它与用户名和密码options.add_argument('--proxy-server={}'.format('http://username:password@ip:port'))
但它似乎也不起作用。我正在寻找一个解决方案,并找到了下面的解决方案,我用它与 chrome 扩展proxy auto auth和没有 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上的代理服务器.
9条答案
按热度按时间iqjalb3h1#
** selenium chrome 代理验证**
如果你需要在python中使用代理,在chromedriver中使用Selenium库,你通常使用下面的代码(不需要任何用户名和密码:
它工作正常,除非代理要求认证。如果代理要求您登录用户名和密码,它将不工作。在这种情况下,你必须使用更棘手的解决方案,解释如下。顺便说一句,如果你白名单您的服务器IP地址从代理提供商或服务器,它不应该问代理凭据。
要设置代理认证,我们需要生成一个特殊的文件,并使用下面的代码将其动态上传到chromedriver。这段代码将selenium与chromedriver配置为使用HTTP代理,该代理需要使用用户/密码对进行认证。
函数get_chromedriver返回配置好的selenium webdriver,你可以在你的应用程序中使用。这段代码已经过测试,运行良好。
了解更多关于Chrome中onAuthRequired事件的信息。
093gszye2#
使用 selenium 线。
文档中的示例代码:
HTTP代理
SOCKS代理
安装时:
mlmc2os53#
这里有一个快速而有创造性的解决方案,它不需要修改selenium的选项或上传文件到chromedriver,它使用pyautogui(可以使用任何Python包来模拟按键)来输入代理认证细节,它还使用线程来处理chrome认证弹出窗口,否则会暂停脚本。
注意:对于任何严肃的项目或测试套件,我会建议选择一个更健壮的解决方案。然而,如果你只是在试验,需要一个快速有效的解决方案,这是一个选择。
bvpmtnay4#
我也在寻找同样的答案,但只针对Java代码,所以下面是我的@itsmnthn Python代码变体。
不要忘记将MainTest类的String字段更改为您的IP、端口、登录名、密码和chromeDriver路径。
k10s72fa5#
我也遇到了同样的问题--难道不可能把selenium-wire功能和选项中的headless功能结合起来吗--对我来说,这个代码是有效的--这有什么问题吗?
我认为这个解决方案在无头模式下也能工作。
bttbmeg06#
因为似乎不可能直接配置Chromedriver使用需要认证的代理,所以你可以使用一个不需要任何认证的本地下游代理,然后这个本地代理将所有请求发送到你最初想使用的“真实的的”代理,并提供所需的认证。
我已经使用tinyproxy来完成这个任务,你可以在tinyproxy-configuration(tinyproxy.conf)中添加下面的代码行:
请确保使用要使用的代理的值替换user、pass、host和port。
然后你可以配置你的Chromedriver来使用tinyproxy,就像前面的答案中所描述的那样,Tinyprox默认运行在8888端口,所以你可以通过127.0.0.1:8888访问它。正如this answer中所提到的,不需要身份验证就可以很容易地使用代理:
dvtswwa37#
一路上,在更新中,使用扩展的解决方案不起作用(至少在windows中),而mac和linux可以。我认为它是chromedriver v2.44,最后一个带有扩展的工作版本
t2a7ltrp8#
对于这个问题有 * 几个解决方法 *,但是目前无法解决Selenium中的身份验证对话框。请参见this issue:
目前还没有办法在导航到页面时处理HTTP身份验证提示,只有在URL中使用用户名/密码进行预身份验证才有效(显然,在IE等一些浏览器中并非没有变通办法)。
hmmo2u0o9#
以下是最新版本Chrome和@itsmnthn解决方案附带的清单版本3
和处理此问题的C#类(同样,基于@itsmnthn解决方案)