4

私は PhantomJS をテストしており、angel.co にリストされているすべてのスタートアップを返そうとしています。一番下の「次へ」をクリックしてフロントページを改ページする必要があるため、PhantomJS を使用することにしました。現在、このコードは結果を返しません。私は PhantomJS をまったく使用したことがなく、すべてのコード例を読んだので、ガイダンスをいただければ幸いです。

var page = require('webpage').create();
page.open('https://angel.co/startups', function(status) {
if (status !== 'success') {
    console.log('Unable to access network');
} else {
     page.evaluate(function() {
        var list = document.querySelectorAll('div.resume');
        for (var i = 0; i < list.length; i++){
           console.log((i + 1) + ":" + list[i].innerText);
        }
     });
}
phantom.exit();
});
4

1 に答える 1

17

デフォルトでは、ページで評価されたコンソール メッセージは PhantomJS コンソールに表示されません。

の下でコードを実行するpage.evaluate(...)と、そのコードはページのコンテキストで実行されます。したがって、 がconsole.log((i + 1) + ":" + list[i].innerText);ある場合、PhantomJS ではなく、ヘッドレス ブラウザ自体にログが記録されます。

すべてのコンソール メッセージを PhantomJS 自体に渡す場合は、ページを開いた後に次を使用します。

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

page.onConsoleMessageページ内からコンソールに出力するたびにトリガーされます。このコールバックを使用して、PhantomJS にメッセージを独自の標準出力ストリームにエコーするように依頼しています。

参考までに、最終的なコードは次のようになります (これは私にとっては正常に出力されます)。

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

page.open('https://angel.co/startups', function(status) {
    page.onConsoleMessage = function (msg) { console.log(msg); };
    if (status !== 'success') {
        console.log('Unable to access network');
    } else {
         page.evaluate(function() {
            var list = document.querySelectorAll('div.resume');
            for (var i = 0; i < list.length; i++){
               console.log((i + 1) + ":" + list[i].innerText);
            }
         });
    }
    phantom.exit();
});
于 2013-08-08T16:35:21.770 に答える