CasperJS で JQuery を使う

CasperJS は PhantomJS の機能を使って現在扱っているページに対して JS を差し込める。

var casper = require('casper').create({clientScripts: ['jquery-1.9.1.min.js']});

clientScripts にローカルの JQuery へのパスを指定する。phantom.incectJs() を使っているのでリモートのファイルは指定できない。

で、実際に使うには

var url ='http://www.akb48.co.jp/';
var casper = require('casper').create({clientScripts: ['jquery-1.9.1.min.js']});
casper.start(url, function() {
  this.echo($(title).text());
});
casper.run();

…では動かない。

ReferenceError: Can't find variable: $

とエラーが出る。evaluate() を使う必要がある。

var url ='http://www.akb48.co.jp/';
var casper = require('casper').create({clientScripts: ['jquery-1.9.1.min.js']});
casper.start(url, function() {
    var title = casper.evaluate(function(){
        return $('title');
    });
   this.echo(title.text());
});
casper.run();

…では動かない。
evaluate() は返り値に primitive object = JSON に変換可能なオブジェクトしか返せないので

var url ='http://www.akb48.co.jp/';
var casper = require('casper').create({clientScripts: ['jquery-1.9.1.min.js']});
casper.start(url, function() {
    var title = casper.evaluate(function(){
        return $('title').text();
    });
   this.echo(title);
});
casper.run();

とする必要がある。
これで

AKB48公式サイト

ちゃんと JQuery を使うことができる。
めんどい。非常にめんどい。