杭州app开发:selenium的firefox如何设置代理
原创 2020-01-30 20:25:21

杭州app开发:selenium虽然统一了接口,但是大部分driver还是有不同定制化的地方,比如说设置代理就是一点。如果你有需求需要多个driver轮流来使用,可能就要考虑一个兼容的情况。

目前我们使用比较多的driver应该是chrome和gecko(firefox),不排除还有人在使用phantomjs,ie,HtmlUnit,Opera。它们设置代理的方式都大相径庭,另外由于不同公司,代理又分为免验证和需验证两种,在使用过程中,小编就遇到有些代理商会强制浏览器弹出,输入代理账号密码。下面都会有方法兼容这2种情况,

在这里小编只向大家介绍一部分,我所研究的代理配置方法。


方案一:(chrome有效,firefox无效)

ip_server = "183.146.156.222:24852"
proxy_username = "SJ3NYQK06YZY052O"
proxy_password = "5BF3CEHKB148"
proxy = Proxy({
    'proxyType': ProxyType.MANUAL,
    'httpProxy': ip_server,
    'ftpProxy': ip_server,
    'sslProxy': ip_server,
    'socksUsername': proxy_username,
    'socksPassword': proxy_password,
})
经过测试,这类设置在Firefox上无效果。这类方式应该可以解决某些代理弹出框输入用户名密码问题
driver = webdriver.Firefox(proxy=proxy)

方案二:
这类方案出发点在于浏览器插件,但是firefox每次升级,都不再向下兼容,导致以前很多插件都无法使用,比如说close和modify_headers都无法使用。
这2个插件可以单独使用,也可以配合使用。一个是用来禁止弹窗授权,然后使用 webdriver.FirefoxProfile() 方式把账号密码设置进去,设置之前还得进行encode64编码。
另外一个插件是修改请求头,代理服务器通过校验请求头是否携带账号密码信息,来判断认证通过。
如果你是最新的火狐浏览器,请放弃这种方案

方案三:
在本地创建profile文件,火狐每个用户可以个性化定制profile文件,把代理数据都配置在文件中。
这种方案笔者没有试过,不过许多人都说此方案可行。

方案四:
pip install selenium-wire
这个可真是神器,在selenium的基础上封装了一层,使得代理配置更加简单,并且各个driver统一起来更高效。
具体用法如下:
from seleniumwire import webdriver

proxy_username = "xxx"
proxy_password = "bbb"
ip_server = "%s:%s@183.333.222.222:1080"%(proxy_username,proxy_password)
options = {
    'proxy': {
        'http': 'http://'+ip_server,
        'https': 'https://'+ip_server,
        'no_proxy': 'localhost,127.0.0.1'
    }
}
driver = webdriver.Firefox(seleniumwire_options=options))

笔者相信依然有许多其他办法,来解决代理授权登录问题。条条道路通罗马~!如果你有更好的建议,可以联系小编,将您的文章分享在我们平台上!