3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

今更casperJSで遊んでみた〜cookieログイン編〜

Last updated at Posted at 2017-03-27

はじめに

今更ですが、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を使って想定している画面が表示されたのを確認してから次の処理を実行させるようにする。

⇒例えば、表示されるはずの画面内だけに存在する要素を指定し、その要素が確認できたら次の処理をさせる

続編

今更casperJSで遊んでみた〜phpから実行して引数を受け渡す〜

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?