2016-10-24 14 views
0

私はphantomJSを使用して、NetworkタブからすべてのリクエストURLを取得していますが、不要なリクエストも増えています。PhantomJS onResourceReceivedが予想よりも多くの結果を返します

例えば、あなたがmarvel.comに行くと、Networkタブには117のリクエストがあり、私のスクリプトは142の結果を返します。さらに、ネットワークタブからこれらの117のリクエストを取得する方法はありますか? ?

これは私のコードです:

var urls = ["https://marvel.com"]; 
var page = require('webpage').create(); 
var links = ""; 

var fs = require('fs'); 
var path = 'TestOutput.txt'; 

function handle_page(url){ 
    page.open(url,function(){ 
    fs.write(path, links, 'w'); 
    next_page(); 
    }); 

    page.onResourceReceived = function(response) { 
    if(links.indexOf(response.url) == -1 && response.url.indexOf("http") !== -1) { 
     links += response.url + '\n'; 
    } 
    } 
    links += '\n'; 
    links += '-------------------------------------------------------------------------------------------------'; 
    links += '\n'; 
} 

function next_page(){ 
    var url = urls.shift(); 
    if(!url) { 
    phantom.exit(0); 
    } 
    handle_page(url); 
} 

next_page(); 
+0

あなたが「不要」とはどういう意味ですか? Chromeでサイトを開き、devtoolsの[ネットワーク]タブに123のリクエストがありました。どのようにしてそれらのいずれかが欲しいかどうかできますか? – Vaviloff

+0

私はなぜネットワークのタブからの要求の数よりも多くを得ているのだろうか...私はちょうどネットワークのタブに表示される要求から要求URLを取得したいと思います。それは理にかなっていますか? – Valip

答えて

0

異なるブラウザは異なる挙動を示します。 PhantomJSはフルブラウザで、Chromeの動作方法は何もありません。

page.onResourceReceived event handlerは、ほとんどの要求(ネットワーク接続が途中で中断されなかった場合に実際に発生したすべての要求)に対して2回トリガーされます。このイベントハンドラは、最初のデータが到着すると(response.stage == "start")、接続が閉じられると(response.stage == "end")トリガされるためです。

数字を見ると、PhantomJSは約71件のリクエストしか見ていないことになります。それはChromeが見るよりもはるかに少ない。理由はちょっと不思議ですが、PhantomJSでは広告サイトへの多くの接続が壊れているようです。多くの広告は単に読み込まれません。これには多くの理由がありますが、それを修正することはできません。あなたは、次のcommandline optionsで遊ぶことができ

(改行やバックスラッシュは読みやすくするために追加された):

--web-security=false \ 
--local-to-remote-url-access=true \ 
--ignore-ssl-errors=true \ 
--ssl-protocol=any 
関連する問題