phantomjs初步 phantomjs 截图
一、page对象抓取页面并存储为图像(以etao为例,以下若不另外说明,均为此)注意:phantom.exit()放在page.open()里为宜why?不知var page = require('webpage').create();page.open('http://www.etao.com',function(){page.render('etao.png');phantom.exit();});抓取结果如下:
不足之处:1、分辨率低。2、抓取页面内容宽度默认为990px,可以通过page.viewportSize = {width:2200,height:2000}来修改虚拟页面的大小。需要改进:1、图像存储路径问题能否解决?2、能否写成调用模式?
二、测试页面加载速度代码示例A:var page = require('webpage').create(), t, address;if (phantom.args.length === 0) { console.log('Usage:loadspeed.js <some URL>'); phantom.exit();}
t = Date.now();address =phantom.args[0];page.open(address, function(status) { if (status != 'success'){ console.log('FAIL to load the address'); } else { t = Date.now() - t; console.log('Loading time ' + t + 'msec'); } phantom.exit();});
代码示例B: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 time ' + t + 'msec'); } phantom.exit();});不足之处:1、每次测量结果不同,平均结果约为2300+msec2、phantom.exit()之后不需要return,否则出现syntax error:parse error
三、执行js代码evaluate()可以返回一个简单对象,但是不能返回函数或者闭包。下面的代码实现的是提取页面的title,并显示。注意:1、从webpage上console.log的信息默认状态下,不会被显示,即便是evaluate()中的代码。为了显示,需要调用page的onConsoleMessage事件。2、page.evaluate()是个sandbox,只能执行()里网页中的代码和进行一些DOM操作,且()里的代码不能获取()之外的对象和变量,比如,page的方法与函数等。疑问:如何向evaluate()中传递参数呢???完整代码如下:var page = require('webpage').create();page.onConsoleMessage = function(msg){console.log('Page title is' + msg);};var url=phantom.args[0];page.open(url,function(status){page.evaluate(function(){console.log(document.title);});phantom.exit();});不足: 1、汉字显示的是乱码,,,不知如何解决。
四、https://github.com/ariya/phantomjs/blob/master/examples/imagebin.js中的源码//Upload an image to imagebin.org
var page=require('webpage').create(),system=require('system'),fname;
if(system.args.length!== 2){console.log('Usage:imagebin.js filename');phantom.exit(1);} else{fname=system.args[1];page.open("http://imagebin.org/index.php?page=add",function (){page.uploadFile('input[name=image]',fname);page.evaluate(function() {document.querySelector('input[name=nickname]').value= 'phantom';document.querySelector('input[name=disclaimer_agree]').click()document.querySelector('form').submit();});window.setTimeout(function() {phantom.exit();},3000);});}为何自己写的,就有错呢?varpage = require('webpage').create();page.open('http://www.weibo.com/',function (status) {if (status === 'fail') { console.log('loadfailed'); } else{console.log("12");page.evaluate(function(){ document.querySelector('div#pl_login_form.W_login_forminput[name=username]').value = 'zhuxi';document.querySelector('div#pl_login_form.W_login_forminput[name=password]').value = '82';document.querySelector('div#pl_login_form.W_login_formdiv.info_list a.W_btn_g span').click();});} page.close(); phantom.exit();});显示错误为:null is not a object(evaluate 'document.queryS......hui'')
分析:服务器登陆都有严格的流程,一般都会经过HTTPS协议,POST密码,而且是加密过的,还会经过302跳转等,因此这种直接通过GET的登陆肯定行不通,不过可以看看phantomjs是否有类似于curl或者java中的httpclient的api供使用模拟登陆。
更多阅读
智能手机怎么截图 手机截图工具下载
智能手机怎么截图——简介 我们在操作手机的时候想要把屏幕上的画面保存下来,也许你会拿相机照张照片。其实不用那么麻烦,智能手机的截图软件有很多,我们完全可以通过这些软件完成屏幕截图的工作。下面介绍智能手机截图的方法。智能手
怎么用电脑截图 如何用电脑截图
怎么用电脑截图——简介电脑截图可以用到很多种,那这里我给大家讲一些经常用得到的截图方法:1、print键截图。2、QQ截图。3、搜狗截图。为什么介绍这三种,因为这个都是时常用得到,也不用在去下载一些什么软件之类的。方法1,在键盘上可以
cf截图保存在哪 cf怎样保存截图
cf截图保存在哪——简介我们在玩cf中经常会有非一般的战绩,这时我们可以使用cf截图功能对游戏画面进行保存,但是玩着玩着就不知道cf截图保存在哪,找不着咋办,下面就告诉你cf截图保存在哪里。cf截图保存在哪——cf截图保存在哪cf截图保
dnf怎么如何截图 dnf如何截图快捷键
dnf怎么如何截图——简介在玩dnf的时侯我们要把自己在游戏中爆装备时的图截下来发给别人看的时候?怎么去截图呢?第一种:用qq自带的截图工具第二种:用w7自带的截图工具dnf怎么如何截图——第一种:用qq自
DNF疑难解析:9 DNF截图在哪里
DNF疑难解析:[9]DNF截图在哪里——简介 广大的地下城与勇士的战友们,你们是不是有时候会苦恼把游戏中的精彩环节,截图下来,结果翻遍了电脑的大小盘,却没有找到呢?下面,就让我来帮助大家找一下。DNF疑难解析:[9]DNF截图在哪里——DNF截图方