ブラウザエンジン-phantomjs初認識

5399 ワード

最近重要な任務がないので、暇を見つけてプロジェクトグループの爬虫グループのコードを見てみました.私たちの爬虫類は主に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.Webロードの例
      
    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は1つのとても强大なブラウザエンジンで、私もちょうど接触して间もないため、多くの地方はまだあまり熟知していませんが、幸いにも彼のドキュメントは多くて、例もとても豊富で、基本的に持参した例はすべて1つのapiとして呼び出すことができて、手も简単で、jsに対して少し基础の友达はすべてすぐに手に入れることができます.