Selenium java配置使用带用户信息的浏览器以及IP代理——火狐&chrome

博客提到的程序的gitee地址
selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样,原来用windows可以直接使用你自己安装的浏览器,其实mac、ubuntu也可以,但是官方也提供了相关驱动。

火狐是在github上

谷歌需要翻墙,

safari和opera也用过,不过查看页面元素不方便,反正一般就用这两个
google的好处是因为自己弄的有科学上网的插件--谷歌访问助手,网上很容易下,所以如果打开系统的浏览器就可以翻墙下载了,火狐是因为存的很多登陆信息,如果爬微博,登陆验证很麻烦,用这个打开就已经登陆了,而且selenium原来可是firefox的亲儿子,所以火狐的接口是很好使用的(selenium专门为火狐写了ProfilesIni 类,哎,不管什么平台都不用改配置,比谷歌用着方便多了)。
上面两个如果其实就是我真实遇到的问题,如果不想各种session、cookie,也没钱买vpn,可以试试下面的做法

关于新浪微博免登陆——firefox

其实这个我原来也想过强制登陆的,但是一言难尽,当时我就想使用cookie这种东西,但是新浪这个一堆session不知道怎么弄就放弃了,当时还想为什么不能像火车头那样打开系统浏览器呢,我也没深研究,就碰运气的去爬。
昨天在搞ip代理的时候,突然发现可以读取默认浏览器的信息,我的天,当时还没想到这免登陆的问题,晚上灵机一动试了一下完美
首先,你自己先登上你的账号,这个我就不说了,这是我登上后的个人主页 https://weibo.com/whuwangxin/home?wvr=5&c=spr_web_sq_firefox_weibo_t001
然后如果你只是单纯的使用下面这段代码

System.setProperty("webdriver.gecko.driver", "resource/geckodriver");
WebDriver driver = new FirefoxDriver();

结果就是一个登录界面

所以加载刚才已经登陆过的信息,即使用系统默认的浏览器,这样刚开始启动会比较慢

System.setProperty("webdriver.gecko.driver", "resource/geckodriver");
ProfilesIni allProfiles = new ProfilesIni();
FirefoxProfile firefoxProfile = allProfiles.getProfile("default");
FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.setProfile(firefoxProfile);
WebDriver webDriver = new FirefoxDriver(firefoxOptions);

突然被自己曲线救国的思想折服(可能原来就有人提过这种方法吧,不过我没看到过。。。)

利用google的科学上网插件

其实思想和上面的火狐类似,只要启动默认浏览器就行了,因为谷歌访问助手是自动随着开启的
废话不多讲了

但是下面这段代码,注意事先需要关闭chrome,让浏览器重头开始读取配置

System.setProperty("webdriver.chrome.driver", "resource/chromedriver");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("user-data-dir=/Users/unclewang/Library/Application Support/Google/Chrome");
WebDriver webDriver = new ChromeDriver(chromeOptions);

最后关于ip代理

我是在这个网站买的代理,具体就不说了,可以设置哪些ip可以使用代理ip
,用了两年了,很方便
然后网上很多教程还是关于selenium2的直接使用DesiredCapabilities,但是已经被deprecated了

然后看了看api,使用了最新的chromeoptions和firefoxprofile实现

谷歌
Proxy proxy = new Proxy();
String proxyIpAndPort = "127.0.0.1:8000";
System.out.println(proxyIpAndPort);
proxy.setHttpProxy(proxyIpAndPort).setFtpProxy(proxyIpAndPort).setSslProxy(proxyIpAndPort);
DesiredCapabilities cap = new DesiredCapabilities();
cap.setCapability(CapabilityType.ForSeleniumServer.AVOIDING_PROXY, true);
cap.setCapability(CapabilityType.ForSeleniumServer.ONLY_PROXYING_SELENIUM_TRAFFIC, true);
System.setProperty("http.nonProxyHosts", "localhost");
cap.setCapability(CapabilityType.PROXY, proxy);
ChromeOptions chromeOptions = new ChromeOptions().merge(cap);
火狐
FirefoxProfile firefoxProfile = new FirefoxProfile();
firefoxProfile.setPreference("network.proxy.type", 1);
firefoxProfile.setPreference("network.proxy.http", (IPPORT.split(",")[0].split(":"))[0]);
firefoxProfile.setPreference("network.proxy.http_port", Integer.parseInt((IPPORT.split(",")[0]).split(":")[1]));
FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.setProfile(firefoxProfile);
WebDriver webDriver = new FirefoxDriver(firefoxOptions);

扩展——chromeoptions可以使用的参数,网上直接复制的,试了几个还可以

在Chrome的浏览器地址栏中输入以下命令,就会返回相应的结果。这些命令包括查看内存状态,浏览器状态,网络状态,DNS服务器状态,插件缓存等等。
  about:version - 显示当前版本
  about:memory - 显示本机浏览器内存使用状况
  about:plugins - 显示已安装插件
  about:histograms - 显示历史记录
  about:dns - 显示DNS状态
  about:cache - 显示缓存页面
  about:gpu -是否有硬件加速
  about:flags -开启一些插件 //使用后弹出这么些东西:“请小心,这些实验可能有风险”,不知会不会搞乱俺的配置啊!
  chrome://extensions/ - 查看已经安装的扩展
  其他的一些关于Chrome的实用参数及简要的中文说明(使用方法同上,当然也可以在shell中使用)
  –user-data-dir=”[PATH]” 指定用户文件夹User Data路径,可以把书签这样的用户数据保存在系统分区以外的分区。
  –disk-cache-dir=”[PATH]“ 指定缓存Cache路径
  –disk-cache-size= 指定Cache大小,单位Byte
  –first run 重置到初始状态,第一次运行
  –incognito 隐身模式启动
  –disable-javascript 禁用Javascript
  --omnibox-popup-count="num" 将地址栏弹出的提示菜单数量改为num个。我都改为15个了。
  --user-agent="xxxxxxxx" 修改HTTP请求头部的Agent字符串,可以通过about:version页面查看修改效果
  --disable-plugins 禁止加载所有插件,可以增加速度。可以通过about:plugins页面查看效果
  --disable-javascript 禁用JavaScript,如果觉得速度慢在加上这个
  --disable-java 禁用java
  --start-maximized 启动就最大化
  --no-sandbox 取消沙盒模式
  --single-process 单进程运行
  --process-per-tab 每个标签使用单独进程
  --process-per-site 每个站点使用单独进程
  --in-process-plugins 插件不启用单独进程
  --disable-popup-blocking 禁用弹出拦截
  --disable-plugins 禁用插件
  --disable-images 禁用图像
  --incognito 启动进入隐身模式
  --enable-udd-profiles 启用账户切换菜单
  --proxy-pac-url 使用pac代理 [via 1/2]
  --lang=zh-CN 设置语言为简体中文
  --disk-cache-dir 自定义缓存目录
  --disk-cache-size 自定义缓存最大值(单位byte)
  --media-cache-size 自定义多媒体缓存最大值(单位byte)
  --bookmark-menu 在工具 栏增加一个书签按钮
  --enable-sync 启用书签同步

“Selenium java配置使用带用户信息的浏览器以及IP代理——火狐&chrome”的一个回复

  1. Fantastic site. A lot of helpful information here.

    I am sending it to several friends ans also sharing in delicious.
    And naturally, thank you for your sweat!

发表评论

电子邮件地址不会被公开。