2

CasperJS を phantomJS 1.7.0 で使用してイベントをシミュレートすることにより、サイトからデータを取得しようとしています。

通常のクリック イベントと選択イベントをシミュレートできます。しかし、私のコードは次のシナリオで失敗します:

リモートページのボタン/アンカーなどをクリックすると、リモートページをクリックすると、AJAX呼び出し/JS呼び出しが開始されます(そのページがプログラマーによってどのように実装されているかによって異なります)。

JS 呼び出しの場合、私のコードは機能し、変更されたデータを取得します。しかし、AJAX 呼び出しが開始された場所をクリックすると、更新されたデータが取得されません。

デバッグのため、エレメントコンテナのページソース(前後)を取得してみましたが、コードに変化は見られません。

待機時間を 10 秒から 1 ミリ秒の範囲で設定しようとしましたが、動作の変更は反映されません。

以下は、クリックするための私のコードです。クリックする要素を表す CSS パスの配列を使用しています。

/*Click on array of clickable elements using CSS Paths.*/
fn_click = function(){
casper.each(G_TAGS,function(casper, cssPath, count1) 
                    {
                            casper.then ( function() {
                            casper.click(cssPath);

                            this.echo('DEBUG AFTER CLICKING -START HTML ');
                            //this.echo(this.getHTML("CONTAINER WHERE DETAILS CHANGE"));
                            this.echo('DEBUG AFTER CLICKING -START HTML');
                            casper.wait(5000, function() 
                                                    {   

                                                        casper.then(fn_getData);
                                                    } 
                                    );
                            });     
                    });
};

アップデート:

上記のスクリプトをデバッグするために、phantomJS の remote-debug オプションを使用しようとしました。機能していません。私は窓にいます。Ubuntu でもリモート デバッグを実行してみます。

私を助けてください。これについて何か助けていただければ幸いです。

アップデート:

サンプルとして以下のコードをご覧ください。

https://gist.github.com/4441570

クリック前とクリック後の内容は同じです。

タグ (投票 / アクティビティなど) の下にある並べ替えオプションをクリックしています。

4

1 に答える 1

4

今日も同じ問題がありました。この投稿を見つけて、jQuery の方向に進みました。

いくつかのテストの後、その Web ページには既に jQuery がロードされていることがわかりました。(かなり古いバージョンですが)

その上に別のjQueryをロードすると、作成されたjs呼び出しが壊れたため、Ajax呼び出しを行うリンクも壊れました。

これを解決するために、http://api.jquery.com/jQuery.noConflict/を見つけました

そして、コードに次を追加しました。

    this.evaluate(function () { jq = $.noConflict(true) } ); 

以前に $ に割り当てられていたものはすべて、そのように復元されます。そして、挿入した jQuery が「jq」の下で利用できるようになりました。

これが皆さんのお役に立てば幸いです。

于 2013-02-28T19:35:53.620 に答える