使用PhantomJS

PhantomJS是一个基于WebKit的服务器端JavaScript API。它全面支持Web而无需浏览器支持,不仅运行快,原生支持各种web标准:DOM处理、CSS选择器、JSON、Canvas,和SVG。PhantomJS可以用于网页自动化,网络监测,网页截屏,以及无界面测试。

1.安装PhantomJS

2.页面加载

  • 通过PhantomJS,一个网页可以被加载、分析和通过创建网页对象呈现。下面演示简单页面的加载列子:
var page = require('webpage').create();
page.open('http://www.cnblogs.com/guguobao/',function(status){
		  console.log("Status:"+status);
		  if (status  === "success"){
		  	page.render('guobao.png');
		  }
		phantom.exit();
		  });

首先使用webpage模块创建一个page对象,然后通过page对象打开网页

3.代码评估

  • 为了评估网页中的js代码,可以利用evaluate。这个执行是'沙盒式'的,他不会去执行网页外的js代码。evaluate方法可以返回一个对象。然而返回值仅限对象,不能包含函数(或闭包)。
var url  = 'http://www.cnblogs.com/guguobao/'
var page = require('webpage').create();
page.open(url,function(status){
	var title = page.evaluate(function(){
		return document.title;
	})
	console.log('Page title is'+title);
	phantom.exit();
});
  • 任何来自网页并且evaluate()内部代码的控制台信息,默认不会显示。要覆盖此行为,使用onConsoleMessage回调方法。代码如下:
var url  = 'http://www.cnblogs.com/guguobao/';
var page = require('webpage').create();
page.onConsoleMessage = function(msg){
	console.log('Page title is'+ msg);
	};
page.open(url,functon(status){
		  page.evaluate(function(){
	console.log(document.title);
});
phantom.exit();
});

4.屏幕截图

  • 由于PhantomJS使用的是Webkit内核,一个真正的布局和渲染引擎,他可以捕捉一个网页的屏幕截图。另外PhantomJS可以渲染网页上的元素,所以它不仅仅用于HTML和CSS的内容转换,还可以用于SVG和画布。PhantomJS不仅可以保存为png,还可以pdf。
var page = require('webpage').create();
page.open('http://www.cnblogs.com/guguobao/',function(status){
		  console.log("Status:"+status);
		  if (status  === "success"){
		  	page.render('guobao.pdf');
		  }
		phantom.exit();
		  });

5.网络监控

  • PhantomJS允许检验网络流量,因此它适合分析网络行为和性能,实现 对网络的监听。
var url = 'http://www.cnblogs.com/qiyeboy/'
var page = require('webpage').create();
page.onRepaintRequested = function(request){
	console.log('Request'+JSON.stringify(request,undefined,4));
};
page.onResourceReceived = function(response){
	console.log('Receive' + JSON.stringify(response,undefined,4));
};
page.open(url);

6.网页自动化

  • PhantomJS可以加载和处理网页,非常适合自动化处理,PhantomJS中标准JavaScript的DOM操作和CSS选择器都是生效。例如:
var page = require('webpage').create();
console.log('The default user agent is ' + page.settings.userAgent);
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0';
page.open('http://movie.mtime.com/108737/', function(status) {
  if (status !== 'success') {
    console.log('Unable to access network');
  } else {
    var ua = page.evaluate(function() {
      return document.getElementById('ratingRegion').textContent;
    });
    console.log(ua);
  }
  phantom.exit();
});

首先创建page对象,接着指定user-agent,打开网页,加载完成后,执行DOM操作,获取id=ratinRegion元素的内容,

  • 在1.6版本后,支持添加外部js库,例如:
 var page = require('webpage').create();
page.open('http://www.sample.com', function() {
  page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
    page.evaluate(function() {
      $("button").click();
    });
    phantom.exit()
  });
});

posted @ 2018-09-01 17:08  大大的大笨熊  阅读(258)  评论(0编辑  收藏  举报