0

私は、phantomjsを使用してウェブサイトからデータを取得する簡単なWebスクレーパーを作成します。 querySelectorAllを使用して私が望むコンテンツを取得したとき、私にとってはうまくいきません。ここに私のコード全体があります。PhantomJS querySelectorAll()。textcontentは何も返しません。

var page = require('webpage').create(); 

var url = 'https://www.google.com.kh/?gws_rd=cr,ssl&ei=iE7jV87UKsrF0gSDw4zAAg'; 

page.open(url, function(status){ 

    if(status === 'success'){ 

    var title = page.evaluate(function(){ 
     return document.querySelectorAll('.logo-subtext')[0].textContent; 
    }); 

    console.log(title); 
    } 
    phantom.exit(); 
}); 

私はこれを解決するのを手伝ってください。

本当にありがとうございます。

答えて

1

デフォルトでは、PhantomJSの仮想画面サイズは400x300です。

var page = require('webpage').create(); 
console.log(page.viewportSize.width); 
console.log(page.viewportSize.height); 

ことをメモを取り、代わりにあなたがあなたのデスクトップのブラウザでご覧ください通常版の彼らはHTMLのモバイル、取り除いたバージョンを提示のサイトがあります。とCSS。

page.viewportSize = { width: 1280, height: 800 }; 

スニッフィングのUserAgentとそれに基づいて決定を下すないサイトもあります。しかし、我々は必要なビューポートのサイズを設定することで修正することができていることあなたのブラウザがわからない場合は、モバイル版を安全な場所に表示することができます。または、盗難されたくない場合は、PhantomJSへの接続を拒否することができます。

console.log(page.settings.userAgent); 

のMozilla/5.0(Windows NTの6.1; WOW64)のAppleWebKit/538.1(KHTML、ヤモリなど)PhantomJS/2.1.1サファリ/ 538.1

しかし、我々は必要なユーザーエージェントを設定することができます

page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0'; 

このような脆弱なものやWebのスクレイピングを扱う場合、実際にはエラーが発生した場合にシステムメッセージを通知する必要があります。

だから、何PhantomJSスクリプトは、onErrorメソッドとonConsoleMessageコールバックなしであってはならない:

page.onError = function (msg, trace) { 
    var msgStack = ['ERROR: ' + msg]; 
    if (trace && trace.length) { 
     msgStack.push('TRACE:'); 
     trace.forEach(function(t) { 
     msgStack.push(' -> ' + t.file + ': ' + t.line + (t.function ? ' (in function "' + t.function +'")' : '')); 
     }); 
    } 
    console.log(msgStack.join('\n')); 
}; 

page.onConsoleMessage = function (msg) { 
    console.log(msg); 
}; 

デバッグPhantomJSスクリプトのもう一つの重要な技術は、スクリーンショットを作っています。 PhantomJSは、あなたがChromeで見るものを見ていますか?

page.render("google.com.png"); 

前に設定するユーザエージェント:

screenshot with native PhantomJS useragent

Firefoxのユーザエージェント

after setting Firefox useragent

を設定した後
関連する問題