最近在调研代理平台的质量,需要尝试selenium接入代理,所以对收集的资料进行总结. selemiun使用java开发,浏览器使用firefoxdriver.
FirefoxDriver使用
String proxyIp = "1.1.1.11"; //代理ip,具体对应实际ip
int proxyPort = 9020; //代理ip端口
FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("network.proxy.type", 1);
profile.setPreference("network.proxy.http", proxyIp);
profile.setPreference("network.proxy.http_port", proxyPort);
profile.setPreference("network.proxy.ssl", proxyIp);
profile.setPreference("network.proxy.ssl_port", proxyPort);
profile.setPreference("network.proxy.ftp", proxyIp);
profile.setPreference("network.proxy.ftp_port", proxyPort);
profile.setPreference("network.proxy.socks", proxyIp);
profile.setPreference("network.proxy.socks_port", proxyPort);
FirefoxOptions options = new FirefoxOptions();
options.setProfile(profile);
WebDriver driver = new FirefoxDriver(options);
这样就设置好了代理,后面访问都会经过代理
Basic Auth认证
有些代理是需要身份验证的,常见是收费代理,这时候需要添加用户名和密码传递给服务器进行认证。
方法一
在firefoxprofile中添加用户名和密码
profile.setPreference("network.http.phishy-userpass-length", 255);
profile.setPreference("signon.autologin.proxy", true);
profile.setPreference("network.proxy.share_proxy_settings", true);
// 对于localhost的不用代理,这里必须要配置,否则无法和webdriver通讯
profile.setPreference("network.proxy.no_proxies_on", "localhost");
profile.setPreference("network.proxy.username", "用户名");
profile.setPreference("network.proxy.password", "密码");
方法二
在firefoxprofile中添加authtoken信息
String credentials = "用户名:密码";
byte[] credentials_ascii = credentials.getBytes("ascii");
byte[] encoded= Base64.getEncoder().encode(credentials_ascii);
credentials=new String(encoded,"UTF-8");
profile.setPreference("extensions.closeproxyauth.authtoken", credentials);
方法三
在请求页面链接中添加用户名和密码
FirefoxProfile profile = new FirefoxProfile();
profile .setPreference("network.http.phishy-userpass-length", 255);
WebDriver driver = new FirefoxDriver(profile );
driver.get("http://username:password@hostname");
方法四
如果上述方法都不成功,那么浏览器首先会跳出一个Alert弹窗的,通过给弹窗sendKeys来处理,这个是可以成功的
Alert alert = driver.switchTo().alert();
alert.sendKeys("用户名" + Keys.TAB.toString() + "密码");
ThreadUtils.sleepInMillSeconds(2000);
alert.accept();
在火狐浏览器中查看代理
在浏览器地址栏输入 “about:config”就会展示浏览器各个配置。
搜索 “Proxy” 可以看到相关代理配置,这些配置和程序的profile参数是一致的。
相关资料
selenium 动态设置代理
selenium 身份代理认证1
selenium 身份代理认证2
Python + Selenium + Firefox 如何使用需要auth的代理?
版权声明:本文为bpk_2原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。