0

CasperJSを学習する方法として、リモート ページの div でクリック イベントを開始し、クリックした後に div のクラス名を変更しようとしています。アイデアは、最初のクリック可能な div を見つけてクリックし、クリック済みとしてマークして、他のクリック可能な div にスキップできるようにすることです。リモート ページの div タグのマークアップは次のようになります。

<div class='clickable_div'></div>

次のcasperjsコードを試しました:

...
casper.then(function() {
    if( this.exists( 'div.clickable_div' ) ) {
        this.evaluate(function() {
            this.click(document.querySelector('div.clickable_div'));
            return document.querySelector('div.clickable_div').setAttribute("className","clicked");
        });
    }
});
...

うまくいかないようです。まず、div でマウス クリック イベントを正しく開始しているとは思いません。私は何が欠けていますか?次に、更新された html を取得しても、div のクラス名に変更が見られません。このステップを間違った方法で行っていますか?

4

1 に答える 1

4

this.clickevaluate()で呼び出していますevaluate()が、おそらくwindow.clickメソッドがないページ DOM コンテキスト内でコードを実行するため、機能しません。

おそらく動作するスクリプトは次のとおりです。

var linkSelector = 'div.clickable_div';

casper.then(function() {
    if (!this.exists(linkSelector)) return;
    this.click(linkSelector);
    this.evaluate(function(linkSelector) {
        __utils__.findOne(linkSelector).setAttribute("className", "clicked");
    }, linkSelector);
});

エラーや特殊なケースをより適切に処理したい場合がありますが、アイデアは得られます。

于 2013-01-12T09:36:34.183 に答える