スクレイピングの開発で対象のサイトに↓のようなJSがありました
<a href="#" onClick="goNext()">次へ</a> <script> function goNext() { document.location = "http://xxxx.xx"; } </script>
抜粋ですが要はaタグをクリックするとJSで画面遷移するといった実装がされていました。
Goutteやsimple_html_domではフォームのサブミットなどはできてもJSを動作させることはできないのでした。
ここで着目したのがヘッドレスブラウザでPhantomJS,casperJSなのです。
これらは“GUIのないブラウザ”というもので、JSを動作させることが可能とのことでやりたいことが叶えられそうです。
準備
とりあえず開発環境や必要なものなど諸々まとめておきます
(開発系のブログはOSの記述を書いて欲しいものですね。)
開発環境
- Windows 10
- PHP 5.6
- composer
ダウンロードするもの
したいこと
CasperJSを使ってJSで画面遷移した後のページをキャプチャーする処理をPHPで実装する。
途中検証のためコマンドプロンプトでも実行する
casperJSをコマンドプロンプトで動かすまで
casperJSとPhantomJSをダウンロード後、以下の手順を行います
① casperJSのフォルダー名を「casperjs」に変更
② phantomjsのフォルダーのbinフォルダーにあるphantomjs.exeをcasper\bin\へ移動
③ casperjsフォルダーをC直下へ移動(C:\casperjs\)
次に環境変数からcasperJSへパスを通します
① コントロール パネル > すべてのコントロール パネル項目 >システムを選択
② 表示された画面の左「システム詳細設定」 >ポップアップの環境変数をクリック
③ システム環境変数のPathを選択したら編集ボタンをクリック
④ 新規を選択して「C:\casperjs\bin\」「C:\casperjs\」を登録
⑤ 終わったら画面を閉じる閉じる
コマンドプロンプトから実行できるかチェック
コマンドプロンプトを起動して以下のコマンドを実行してみましょう。
casperjs --version
どうでしょう「1.1.0」のようなバージョンが表示されます
コマンドプロンプトでバージョンが表示されない
エラーが表示される場合、おそらくこんな文章でしょう。
「’casperjs’ は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
これは環境変数のpathが通っていないので上記フォルダー名や環境変数のPathで入力した値を確認してみましょう。
いや「全部合っているぞ」という場合、Pathのポップアップ画面などを閉じて再度試してみてください。
私はこれをやってみたら改善しました。。
要は閉じることで設定が適用されているのかな・・・
もしかしたらpythonいるかも
コマンドプロンプトでpythoと記述されたエラーが表示されたら、pythonのインストールですので、インストールしましょう。