2

PhantomJS を使用して、トリビアの質問とその回答をスクレイピングしようとしています。Stackoverflow の助けを借りて。私は Javascript をほとんど理解していないので、何が間違っているのかを詳しく説明してください。ページは次のとおりです。

http://www.buddytv.com/trivia/game-of-thrones-trivia.aspx

コードは次のとおりです。

  function click(el) {
   var ev = document.createEvent("MouseEvent");
   ev.initMouseEvent(
           "click",
           true /* bubble */, true /* cancelable */,
           window, null,
           0, 0, 0, 0, /* coordinates */
           false, false, false, false, /* modifier keys */
           0 /*left*/, null
           );
   el.dispatchEvent(ev);
  }

  click('a[href="javascript:___gid_10(0)"]');
  answer = page.evaluate(function() {

   return  $('body').html();
  });

最初の回答をクリックして、その後ページが返すものを返そうとしています(NULLを返すことを除く)。どんな助けでも大歓迎です!ありがとう。

4

3 に答える 3

3

FAQ:イベントをディスパッチした後、ページがすぐに変更されないのはなぜですか?

クリックした後window.setTimeout、しばらくしてページに加えられた変更を確認するために使用する必要があります。ちょっと言ってください。または 5. ページがすぐに変更されないため。読み込みとレンダリングに時間がかかります。

この回答をPhantomJS Web サイトのフロント ページ全体に貼り付けたいと思います。

FAQ: 自分のページでイベントをディスパッチしたいです。どのように?

ええと、page.evaluate()通話内からディスパッチを行う必要があります。それ以外の場合は、PhantomJS 自体でイベントをディスパッチするだけです。これは無意味です。

于 2013-07-04T14:41:45.347 に答える
0

PhantomJS を使用sendEventしてマウスクリックをシミュレートすることもできます。ドキュメントは次のとおりです。

http://phantomjs.org/api/webpage/method/send-event.html

于 2016-04-18T10:45:04.373 に答える
0

これを試して

function click(el){
        var ev = document.createEvent("MouseEvent");
        ev.initMouseEvent(
            "click",
            true /* bubble */, true /* cancelable */,
            window, null,
            0, 0, 0, 0, /* coordinates */
            false, false, false, false, /* modifier keys */
            0 /*left*/, null
        );
        el.dispatchEvent(ev);
    }
于 2013-07-04T11:32:21.137 に答える