由于需要利用phantomJS模拟浏览器执行JS,在采集页面,学习phantomJS,边学习边做一下笔记,留作以后查看。
1.下载phantomJS
下载链接:http://phantomjs.org/download.html
可以下载不同的版本,这里下载Windows版本:phantomjs-2.1.1-windows
2.解压
3.参考官网的QuickStart学习
下面的例子也可以直接用examples下的js文件
新建一个文件夹,命名test,
第一个例子:下面新建一个文件,命名为hello.js,内容包含下面两行
console.log('Hello, world!');
phantom.exit();
然后在命令行执行
输出了 Hello,world!
官网解释:第一行console.log('Hello, world!');是打印功能,类似System.out
第二行是调用phantomJS.exit(),这一步是必须的且重要的,否则phantomJS不会终止。
第二个例子:页面加载
通过创建一个webpage对象,可以对页面加载、分析、渲染
下面学习加载百度首页,并且保存在一个图片
新建baiduload.js文件,包含以下内容
var page = require('webpage').create();
page.open('http://baidu.com.cn', function(status) {
console.log("Status: " + status);
if(status === "success") {
page.render('../test/baidu.png');
}
phantom.exit();
});
在命令行中执行:
在test路径下可以看到,说明上述js执行成功了,继续
由于phantomJS的render功能,phantomJS可以进行网页捕获,类似截图
新建一个loadspeed.js内容包含:
var page = require('webpage').create(),
system = require('system'),
t, address;
if (system.args.length === 1) {
console.log('Usage: loadspeed.js <some URL>');
phantom.exit();
}
t = Date.now();
address = system.args[1];
page.open(address, function(status) {
if (status !== 'success') {
console.log('FAIL to load the address');
} else {
t = Date.now() - t;
console.log('Loading ' + system.args[1]);
console.log('Loading time ' + t + ' msec');
}
phantom.exit();
});
在命令行执行:如果不传任何参数(默认长度是1,具体参数的情况可以参考
http://blog.csdn.net/xm_zhou/article/details/38278595)
传入一个url参数:
第三个例子:
新建一个displaytitle.js文件,内容包含:
var page = require('webpage').create();
var url = "http://phantomjs.org/quick-start.html";
page.open(url, function(status) {
var title = page.evaluate(function() {
return document.title;
});
console.log('Page title is ' + title);
phantom.exit();
});
在命令行执行:
打印出页面的title了
从webpage包括内部的代码,例如evaluate()默认是不显示打印信息的,如果要想显示,需要回调onConsoleMessage,
上面的例子就改为:
var page = require('webpage').create();
page.onConsoleMessage = function(msg) {
console.log('Page title is ' + msg);
};
var url = "http://phantomjs.org/quick-start.html";
page.open(url, function(status) {
page.evaluate(function() {
console.log(document.title+"----------------");
});
phantom.exit();
});
网页请求和响应
在命令行中执行 netlog.js
后面再继续学习如何模拟登录,模拟点击