はじめに
今更ですが、casperJSを使って色々試していたのですが
案外一連の流れでまとまっている記事がなかったのでメモとして残しておきます。
今回はよく使いそうなcookieを使ってログインする方法。
そしてログイン後ちゃんと表示されるまで待機させてからキャプチャーを取るようにしています。
# 書き方
var casper = require("casper").create();
var fs = require('fs');
var loginUrl = "https://example.com/login.php";
var cookieFile = '/tmp/cookie.txt';
var userName = 'hoge';
var password = 'huga';
if (fs.isFile(cookieFile)) {
var data = fs.read(cookieFile);
phantom.cookies = JSON.parse(data);
}
casper.start(loginUrl, function(){
casper.waitFor(isLoginDisplayed, function() {
var cookies = JSON.stringify(phantom.cookies);
fs.write(cookieFile, cookies, 644);
this.fill('form',
{user_name: userName, password: passWord},
true
);
});
});
casper.waitFor(isTopDisplayed, function(){
this.capture('capture.png');
});
function isLoginDisplayed() {
return this.evaluate(function () {
return document.getElementById('login') != null;
});
}
function isTopDisplayed() {
return this.evaluate(function () {
return document.getElementById('top') != null;
});
}
ポイント
当たり前っちゃ当たり前で大したポイントでもないけれど・・・
- cookieの保存場所(tmp等)を決めておき、毎ログイン時に読み書きを行うようにする。
- waitForを使って想定している画面が表示されたのを確認してから次の処理を実行させるようにする。
⇒例えば、表示されるはずの画面内だけに存在する要素を指定し、その要素が確認できたら次の処理をさせる