• 使用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()
      });
    });
    
    
  • 相关阅读:
    Android中连接蓝牙设备时遇到createRfcommSocketToServiceRecord的UUID问题和BluetoothSocket的connect失败
    android4.0蓝牙使能的详细解析 (转载)
    蓝牙介绍
    Bluetooth 4.0之Android 讲解
    jQuery来源学习笔记:扩展的实用功能
    Linux 0.12 内核管理存储器
    java战斗系列-战斗MAVENPW结构
    牟大哥:《App自我促销》连载2 直立人迁移走
    AC自己主动机 总结
    SpringMVC 上下文webApplicationContext
  • 原文地址:https://www.cnblogs.com/guguobao/p/9570924.html
Copyright © 2020-2023  润新知