存档
使用casperjs进行网页截图
casperjs有个很实用的功能就是网页截图,通过几个capture函数就能很方便的实现截图功能。
简单代码如下:
var casper = require(“casper”).create();
var x = require(‘casper’).selectXPath; //用来简化XPath操作casper.start(‘http://new.cnzz.com/v1/login.php?siteid=123454321’, function(){
this.fill(‘form[name=”form1″]’, {
‘password’: 123456
}, true);
});casper.then(function(){
//this.capture(‘cnzz.png’); //截取整个页面
this.captureSelector(‘cnzz.png’, x(‘//*[@id=”overview_top_order_table”]’)); //截取指定的selector
});casper.run();
需要注意的是,如果网页内包含中文,服务器上需要安装中文字符集包。CentOS上通过以下命令来安装:
yum install bitmap-fonts bitmap-fonts-cjk
casperjs批量执行多个url
使用each api可以批量访问多个url。例子:
var casper = require(“casper”).create();
var links = [
“http://baidu.com/”,
“http://qq.com/”,
“http://bing.com/”
];casper.start();
casper.each(links, function(self, link) {
this.thenOpen(link, function() {
this.echo(this.getTitle() + ” – ” + link);
});
});casper.run();
使用casperjs爬取cnzz统计数据
通过cnzz统计数据来监测网站的运行是运营和运维的一个重要手段,当站点比较多时,自动获取站点的统计数据能够极大的提高工作效率。
然而cnzz没有提供查询接口,需要我们自己手动编写代码来爬取数据。通过抓包可以发现需要很多步骤才能拿到数据,并且每次请求都携带了一些cookies等验证信息。如果一步步来实现的话非常麻烦,实际上我用Snoopy尝试进行抓取并不成功,总是跳转回登录url。
同事提供了一种方法:使用phantomjs模拟登录,试了一下,还真是方便很多。
这里提供了使用casperjs(封装了phantomjs)来进行抓取的实现代码,仅供参考。
var
casper = require(
"casper"
).create()
this
.fill(
'form[name="form1"]'
, {
'password'
: 1234560
},
true
);
//true, 填充完毕后,立刻提交表单
});
casper.then(
function
(){
var
today=
this
.evaluate(
function
(){
var
tbl=document.getElementById(
"overview_top_order_table"
);
return
{
pv:tbl.rows[1].cells[1].innerHTML,
uv:tbl.rows[1].cells[2].innerHTML,
ip:tbl.rows[1].cells[3].innerHTML,
};
});
this
.echo(today.pv);
this
.echo(today.uv);
this
.echo(today.ip);
});
casper.run();