CasperJSをパラメータ付きで実行しevaluteに引数を設定する、PHPから叩いてWebAPI化
2018-08-31
CasperJSの実践的な使い方として、「引数にURLを設定して起動することで、引数に合わせて様々なサイトをクロールする」だとか、「引数にIDとPASSを設定し、起動毎にログインするアカウントを変える」といった使い方があります。
WebAPI的な使い方をしたい場合などにおいて必須となる手法なので、共有しておきます。
また、ついでにPHPファイルから叩くことで、WebAPIを簡単に作る方法についても記載しておきます。
(ただし、PHPが本当にWebAPIに適しているのか?という点については、今回は特に触れません)
パラメータを付けてCasperJSを起動する
起動方法自体は想像付くかと思います。
1 |
casperjs sample.js param1 param2 |
簡単ですね、スペース空けてパラメータ入力するだけです。複数ある場合は、スペースを空けて複数設定すればOKです。
オプション付ける場合も変わりません。
1 |
casperjs sample.js --cookies-file=cookies.txt param1 param2 |
パラメータの受け取り方は、以下になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
var casper = require("casper").create({ // 表示サイズを一応設定 viewportSize: { width: 1920, height: 1080, }, // debug情報表示 verbose: true, logLevel: "debug" }); var url = casper.cli.args[0]; var id = casper.cli.args[1]; var password = casper.cli.args[2]; |
casper.cli.argsでパラメータの配列が取得できます。
evaluteに引数を設定する
微妙にはまったのがこれ。「パラメータで設定した情報をinputに設定してpost」みたいなことをやろうとしたら、上手くevaluteに値が渡らないというケースに出くわしました。
ということで解決策。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
var casper = require("casper").create({ // 表示サイズを一応設定 viewportSize: { width: 1920, height: 1080, }, // debug情報表示 verbose: true, logLevel: "debug" }); var text = casper.cli.args[0]; var sub = casper.cli.args[1]; casper.then(function() { // パラメータから取ってきたtextとsubを設定 this.evaluate(function(text, sub) { document.querySelector('.text').value = text; document.querySelector('.sub').value = sub; }, { text:text, sub:sub }); } |
おわかりいただけただろうか。
ちょっとわかりにくいですが、evaluteの第二引数に設定する。そして、evaluteのfunctionの引数に、evaluteの第二引数で設定した変数のキーを設定する。
これで、evalute内に変数の受け渡しが出来ます。
PHPからCasperJSを起動
execで叩くだけです。
1 2 3 |
<?php exec('casperjs sample.js --cookies-file=cookies.txt param1 param2'); ?> |
大変シンプルですが、これで一応WebAPIによるスクレイピングや、自動ログインからの自動投稿などが実現出来ます。当たり前ですが、実運用を行う際には何らかの認証をかけます。
悪用も可能なアレなので、アレをアレする際は気を付けてください。