瀏覽器引擎-phantomjs初次認識


  最近沒什么重要的任務,就抽空看了看項目組爬蟲小組的代碼,因為我們的爬蟲主要是以python的scrapy框架為主,看起來比較方便。在看代碼的時候看到一個叫phantomjs的東西,蠻新鮮的,就去問了下爬蟲開發,這貨是干嘛用的?開發告訴我這個東西是一個js引擎,我們在抓取ajax頁面的時候用的,你們QA不是一直用selenium對付那些js渲染的東西么,可以去試試這個,不需要用瀏覽器的。於是,回去查了一下phantomjs這個東西,學習了下,感覺還是蠻容易上手的。

  Phantomjs是一個輕量的瀏覽器引擎,官網介紹中提到,它主要用在這幾個場合:官網地址:http://phantomjs.org/

  • web測試,主要是可以又輕又快捷的進行web測試,還不用去再去依賴瀏覽器,用過selenium的朋友都知道,打開一個瀏覽器是多么痛苦的事,特別是FireFox,並且他支持很多測試框架,比如RobotFrame, WebDrive等。
  • 頁面自動化渲染.可以通過標准的domApi來操作頁面元素,並且,你也可以注入Jquery,這樣就可以通過jquery來操作頁面元素了.
  • 屏幕捕捉,這個好。有的時候case失敗了,想捕捉屏幕的時候,用selenium自帶的捕捉老是遇到瀏覽器兼容問題,用這個來捕捉應該會穩定很多、
  • 網絡監視.這個我接觸的不多,主要說是可以自動分析頁面的加載速度,並且還可以導出標准的HAR格式文件。

  使用方法:

  運行命令就是 phtntomsjs + js 腳本就可以

  Phtntomsjs用的是commonjs的實現方法,關於commonjs,可以看下http://wiki.commonjs.org/wiki/Modules/1.1.1#Require.

      Phtntomsjs自帶是有幾個模塊,System,Webpage,Child_Process,WebServer

  具體應用:

  1.簡單的訪問環境變量的例子

var system = require('system');
//通過require返回一個外部模塊的接口,這里的外部模塊接口是system
var env=require('system').env;
if (system.args.length === 1) {
    Object.keys(env).forEach(function(key) {
        console.log(key + '=' + env[key]);
}
)}
 else {
    system.args.forEach(function (arg, i) {
            console.log(i + ': ' + arg);
    });
}
phantom.exit();

  2.網頁截圖,網頁截圖用到了webpage模塊,比如我想把博客園首頁截圖下來

var page = require('webpage').create();
page.open('http://cnblogs.com/', function () {
    page.render('cnblog.png');
    phantom.exit();
});

  3.網頁加載的例子

  

var page = require('webpage').create(),
    system = require('system'),
    t, address;

if (system.args.length === 1) {
    console.log('Usage: loadspeed.js <some URL>');
    phantom.exit(1);
} else {
    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;
            //evaluate用來執行一個方法
            console.log('Page title is ' + page.evaluate(function () {
                return document.title;
            }));
            console.log('Loading time ' + t + ' msec');
        }
        phantom.exit();
    });
}

其實這個網頁加載的最好應用就是測試網頁的各種性能,不需要打開瀏覽器去查詢,如果配合雅虎的Yslow工具,加上hudson(jenkins)就能把網頁的加載也進入到持續繼承測試里面。

畢竟在linux下面,很多時候是沒有圖形界面的,phantomjs+Yslow+hudson的超級組合:http://yslow.org/phantomjs/

 總之:phantomjs是一個很強大的瀏覽器引擎,因為我也剛剛接觸沒多久,很多地方還不是很熟悉,不過幸好他的文檔很多,例子也很豐富,基本上自帶的例子都可以當做一個api來調用,上手也很簡單,對js有點基礎的朋友都可以馬上上手。

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM