3

以下は、PhantomJSスクリプトのスニペットです。AJAXdWebページの動的コンテンツを追跡します。track()は1回呼び出されますが、何らかの理由でpage.open()は3回呼び出されます

    function track(url){
        console.log('Tracking',url);
        var page = require('webpage').create();
        console.log('check2')
        if(page){
            console.log('check4');
            page.open(url, function (status) {
                console.log('check3');
                if (status !== 'success') {
                    console.log('Unable to load the address!');
                    setTimeout(function(){start();},1000);
                    setTimeout(function(){page.release();},5000);
                }
                else {
                    console.log('check');
                    var i = 0;
                    var last_winner = false;
                    var logged_once = false;
                    var interval = false;
                    if(!interval){
                        interval = setInterval(function(){
                            var scraping = scrape(page);
                            var date = new Date();
                            var time = date.getTime();
                            if(scraping){/*Bunch of console logs*/}
                            else{
                                console.log('Bidding ended');
                                clearInterval(interval);
                                setTimeout(function(){start();},1000);
                                setTimeout(function(){page.release();},5000);
                            }
                            scraping = false;
                       },1000);
                    };
                };
            });
        };
    };

以下をコンソールに記録します。

Tracking http://www.google.com
check2
check4
check3
check
check3
check
check3
check

どういうわけかわかりませんが、page.open()が3回呼び出されています。

4

1 に答える 1

2

どうやらPhantomJSは、ページにリダイレクトまたはiFrameがロードされている場合、page.openを複数回呼び出します。

PhantomJSバグトラッカーでそれを処理する方法のいくつかの提案があります。

http://code.google.com/p/phantomjs/issues/detail?id=353&q=open%20callback

于 2012-05-30T12:27:59.040 に答える