使用PhantomJS实现模拟登陆(Java爬虫)
来源:互联网 发布:ubuntu修改用户名 编辑:程序博客网 时间:2024/06/03 19:10
PhantomJS介绍
最近开发爬虫的时候,遇到.aspx后缀的网页需要去模拟登陆然后获取cookie,本来计划通过selenium进行登陆,但是效果很不好红色警告很多,似乎selenium对于JavaScript支持不是很好。在查过资料之后,发现了PhantomJS这一大杀器,基本满足爬虫很多需要,便决定使用PhantomJS进行开发模拟登陆。
以下是对于PhantomJS的介绍
(1)一个基于webkit内核的无头浏览器,即没有UI界面,即它就是一个浏览器,只是其内的点击、翻页等人为相关操作需要程序设计实现。
(2)提供javascript API接口,即通过编写js程序可以直接与webkit内核交互,在此之上可以结合java语言等,通过java调用js等相关操作,从而解决了以前c/c++才能比较好的基于webkit开发优质采集器的限制。
(3)提供windows、linux、mac等不同os的安装使用包,也就是说可以在不同平台上二次开发采集项目或是自动项目测试等工作。
PhantomJS介绍资料来源
PhantomJS进行模拟登陆
这次计划将使用Java+phantomjs进行开发,因为本人开发爬虫主要通过Java。
首先上JavaScript代码
var page = require('webpage').create(), testindex = 0,loadInProgress = false;page.onLoadStarted = function() { loadInProgress = true;};page.onLoadFinished = function() { loadInProgress = false;};//构造一个步骤数组var steps = [ //第一步,打开需要登陆的网页 function() { page.open(你想要登陆的网页); }, //第二步,对于登陆的网页的表单进行填写和提交 function() { page.evaluate(function(obj) { document.forms[0].login_id.value=用户名; document.forms[0].passwd.value=用户密码; document.forms[0].submit(); return document.title; }); loadInProgress = true; }, //第三步,获取登陆之后跳转的网页截图,并获取cookie值 function() { page.render('登陆成功.png');//获取登陆成功够的屏幕截图 var cookiesStr=""; var cookies=page.cookies; for(var i in cookies){ cookiesStr=cookiesStr+cookies[i].name+"="+cookies[i].value+";"; } console.log(cookiesStr); }];//使用循环,获取数组中的内容var interval = setInterval(function() { if (!loadInProgress && typeof steps[testindex] == "function") { steps[testindex](); testindex++; } if (typeof steps[testindex] != "function") { phantom.exit(); }}, 10);
接下来是Java代码,本函数的主要功能是在利用phantomjs登陆之后,获取cookie值,这个cookie值将会用于之后的数据获取。
public String geCookie() throws IOException { Runtime rt=Runtime.getRuntime(); Process p=rt.exec(phantomjs.exe的绝对路径字符串+" "+js的绝对路径字符串); InputStream is=p.getInputStream(); BufferedReader br =new BufferedReader(new InputStreamReader(is)); StringBuffer sbf=new StringBuffer(); String tmp=""; while((tmp=br.readLine())!=null){ sbf.append(tmp); } return sbf.toString(); }
登陆完成之后,生成的网页截图将输出在本项目的根路径中。不过,有的时候图片会出问题,会出现网页背景变成黑色的情况,科学上网查了一下,是一个bug,貌似还没有解决。开发最后成功登陆,获取cookie值,用时很短,使用感觉还是不错的。
不过,在开发中我想使用FireFox的FirePath时候遇到网页右键无法点击的情况,这样甚至网页源码都看不了了。在网上查过后,发现是网页编写者通过JavaScript将右键禁用了,最好将浏览器的JavaScript支持关掉,右键禁用就失效了。我是下载了Opera,直接关闭JavaScript支持,FireFox可以下载插件NoScript。
我也就决定以后再开发爬虫的时候,考虑使用phantomjs+selenium+Java这样的组合。由于自己不会JavaScript,很多时候都是照着网上的代码进行开发的,也考虑之后也要学习一下JavaScript,感觉可以用这门语言做好多事情。
参考网页:
本文主要参考的代码
填写表单的方法
- 使用PhantomJS实现模拟登陆(Java爬虫)
- [python爬虫]selenium+PhantomJS模拟登陆
- 爬虫知识点(ajax异步加载,JavaScript 动态刷新,phantomjs + selenium模拟登陆)
- 【python 爬虫】linux 下 selenium+phantomjs 自动模拟登陆
- java编写模拟登陆爬虫
- 【Python3.6爬虫学习记录】(十二)PhantomJS模拟登陆并爬取教务处学生照片(哈工大)
- 【Python】模拟登陆并抓取拉勾网信息(selenium+phantomjs)
- Python3网络爬虫:使用Cookie-模拟登陆
- Java 爬虫模拟知乎登陆
- 使用phantomJS 模拟JS
- 基于selenium-java封装chrome、firefox、phantomjs实现爬虫
- Java网络爬虫(十四)--PhantomJs的使用及性能优化
- java-爬虫部分:关于京东模拟登陆的两种实现
- python+selenium+phantomjs 模拟淘宝登陆
- Selenium+PhantomJS QQ空间模拟登陆
- 利用phantomjs模拟登录网站(帐号登陆)
- Python爬虫技术(一)--模拟登陆
- 爬虫知识点(模拟登陆与json)
- 2017 ACM西安网络赛 G题 Xor
- 混合高斯模型
- 二叉堆的基本概念与实现
- MySQL RESET MASTER与RESET SLAVE和RESET SLAVE ALL
- javabean总结
- 使用PhantomJS实现模拟登陆(Java爬虫)
- C语言 extern
- 第三周——项目三—求集合并集
- MFC控件的使用方法
- Reflection2017.9.18
- java抽象类练习题
- 一道题
- Java中Jedis操作Redis
- WKWebView 初窥-JS交互探究