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