PhantomJSによるシミュレーション登録(Java爬虫類)

5608 ワード

PhantomJS紹介
最近爬虫類を開発した時、出会った.aspx接尾辞のページはログインをシミュレートしてクッキーを取得する必要があり、seleniumでログインする予定だったが、効果が悪い赤色の警告が多く、seleniumはJavaScriptのサポートにあまりよくないようだ.資料を調べたところ、PhantomJSという大きな殺虫器が発見され、爬虫類の多くのニーズをほぼ満たし、PhantomJSを用いて開発シミュレーション上陸を行うことにした.以下に、PhantomJSについて説明する(1)Webkitカーネルベースのヘッダレスブラウザ、すなわちUIインタフェースがない、すなわちブラウザであり、その内のクリック、ページめくりなどが関連操作のためにプログラム設計を必要とする.(2)javascript APIインタフェースを提供する.すなわち、jsプログラムを記述することによってwebkitカーネルと直接対話することができ、その上でjava言語などと結びつけ、javaによってjsなどの関連操作を呼び出すことができ、従来のc/c++によって比較的良いwebkitに基づいて良質な採集器を開発する制限を解決することができる.(3)Windows、linux、macなどの異なるosのインストール使用パッケージを提供し、つまり異なるプラットフォーム上で採集プロジェクトを二次開発したり、自動プロジェクトテストをしたりすることができる.PhantomJSは資料の出所を紹介する.
PhantomJSによるアナログ登録
今回はJava+phantomjsを使って開発する予定です.本人が爬虫類を開発するのは主にJavaを通じているからです.まずはJavaScriptコードを
var page = require('webpage').create(),    
testindex = 0,
loadInProgress = false;

page.onLoadStarted = function() {
    loadInProgress = true;
};

page.onLoadFinished = function() {
    loadInProgress = false;
};
//        
var steps = [
    //   ,         
    function() {
        page.open(        );
    },
    //   ,                 
    function() {
        page.evaluate(function(obj) {
            document.forms[0].login_id.value=   ;
            document.forms[0].passwd.value=    ;
            document.forms[0].submit();
            return document.title;
        });
        loadInProgress = true;
    },
    //   ,             ,   cookie 
    function() {
        page.render('    .png');//            
        var cookiesStr="";
        var cookies=page.cookies;
        for(var i in cookies){
            cookiesStr=cookiesStr+cookies[i].name+"="+cookies[i].value+";";         
        }
        console.log(cookiesStr);
    }
];
//    ,        
var interval = setInterval(function() {

    if (!loadInProgress && typeof steps[testindex] == "function") {
        steps[testindex]();
        testindex++;
    }
    if (typeof steps[testindex] != "function") {
        phantom.exit();
    }
}, 10);

次はJavaコードで、この関数の主な機能はphantomjsを利用してログインした後、cookie値を取得し、このcookie値はその後のデータ取得に使用されます.
public String geCookie() throws IOException
    {
        Runtime rt=Runtime.getRuntime();
        Process p=rt.exec(phantomjs.exe        +" "+js        );
        InputStream is=p.getInputStream();
        BufferedReader br =new BufferedReader(new InputStreamReader(is));
        StringBuffer sbf=new StringBuffer();
        String tmp="";
        while((tmp=br.readLine())!=null){
            sbf.append(tmp);
        }
        return sbf.toString();
    }

ログインが完了すると、生成されたウェブスクリーンショットが本プロジェクトのルートパスに出力されます.しかし、时には画像に問題が発生し、ページの背景が黒くなることがあります.科学的にインターネットで調べてみると、バグで、まだ解決していないようです.開発は最後にログインに成功し、クッキー値を取得し、短い時間で使用することができ、使い心地は悪くない.
しかし、開発中にFireFoxのFirePathを使いたいと思っていたところ、右クリックでクリックできないことがあり、ソースコードさえ読めなくなりました.ネットで調べたところ、ウェブページの作成者がJavaScriptで右クリックを無効にしていることがわかりました.ブラウザのJavaScriptサポートをオフにしたほうがいいです.右クリックを無効にすると無効になります.私はOperaをダウンロードして、直接JavaScriptのサポートを閉じて、FireFoxはプラグインNoScriptをダウンロードすることができます.
私も後で爬虫類を開発することにした時、phantomjs+selenium+Javaという組み合わせを使うことを考えました.自分はJavaScriptができないので、ネット上のコード通りに開発している場合が多いですが、その後もJavaScriptを勉強して、この言語でいろいろなことができると思います.
参考ページ:本稿で主に参照するコード記入フォームの方法