selenium 添加代理ip方式总结

  • Post author:
  • Post category:其他


最近在调研代理平台的质量,需要尝试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 版权协议,转载请附上原文出处链接和本声明。