1

この問題の解決策を見つけようとしています。

  1. ページを開く 特定のリンクを取得する
  2. リンク (ページネーション リンク) をクリックして、結果の 2 ページ目を取得します。
  3. 新しいコンテンツを読んで、新しいリンクをもう一度取得してください....

これは私の casperjs アプリの一部です:

var page = 1;

function getLinks() {    
    var links = __utils__.getElementsByXPath('//div[@class="myDiv"]//a');

    return Array.prototype.map.call(links, function(e) {
        return e.getAttribute('href')
    });
}

casper.start("www.example.com", function(){
   //
})

casper.repeat(2, function() {

    this.then(function(){
        links = this.evaluate(getLinks);
        links = links.concat(links);    
    });

    this.then(function(){
        page++;    
        this.clickLabel(String(page), 'a');
    });

});

ご覧のとおり、repeat 内に 2 つのステップがあります。2 ページだけをチェックする必要があるため、2 を設定しました。

現時点で私の問題は「クリック」です。新しい URL が呼び出されるため機能しますが、最初のステップがすぐに実行されるため、新しいコンテンツが完全に読み込まれないという問題があります。そのため、再度 getLinks() を呼び出すと、以前のコンテンツで引き続き作業します。

ページが完全にロードされたら、明らかに getLinks を使用したいと思います。どうすればできますか?

ありがとうございました!

4

2 に答える 2

-1

FAQ ページでのクリックまたはその他の JavaScript アクションの結果を仮想ブラウザにロードおよび/またはレンダリングする時間を与えるために、一部のコードを遅らせるにはどうすればよいですか?

window.setTimeout(
    function () {
        // process page here
    },
    2000 // number of milliseconds to wait (here 2s)
);

とても簡単ですね。あなたの場合、次のようになります。

do_click();
window.setTimeout(
    function () { process_click_result(); },
    2000 // 2 seconds
);
于 2013-07-09T12:17:44.337 に答える