楽天RMSログイン処理をPHPのGoutteで組んでみたけど意味がなかった

楽天RMSログイン処理をPHPのGoutteで組んでみたけど意味がなかった

楽天RMSログイン処理をPHPのGoutteで組んでみたけど意味がなかった

ログイン処理だけなら結構簡単に実装できます。
でもGoutteでサイト内を追っていこうとすると、すぐに限界が来ました。

何をやっても『認証エラーページ』に飛ばされる

しっかり読み込んでから動かせばいいかもとSleepを活用するけどダメ。
ここまでダメだと単純なaタグのような装いをしつつJSで何かの値をPOSTしているのだろうと…。

と言う事で、下に各コードは直接的に使える代物ではありません。
ただ、Goutteの基礎的な使い方として備忘録になるかなと思い記しておきます。

楽天RMSログイン処理

これでログインをこなし、サイドナビの指示するページまではいけるけどその先がダメ。

認証エラーとなる理由の推測

本当の所は分からないので、あくまで推測です。
ただ、この推測が正しいとなるとGoutteでの情報取得はほぼ無理といって間違いありません。

  • classの値とJavaScriptを組合わせてHTMLからは見えない形でPOSTしているのではないか
  • POSTする値やURLを暗号化している可能性もあり

cookieで行けると思ったのですが、NGという結果。
となると、画面遷移の中で何かが仕掛けられているのだと思います。

ハックまでしてデータ取るなら楽天の用意している方法で取得/処理の方が遥かに省労力。

残る方法は2択

  1. VBSやJSでデスクトップのブラウザ操作をエミュレートし欲しい情報を取得
  2. PHP×ヘッドレスブラウザでエミュレートし欲しい情報を取得

どちらにせよ実ブラウザ操作を組み込まないといけないようです。
その操作をデスクトップから行うかサーバーから行うかですね。

ちなみに、AWSを利用するとIP_BAN食らってもIP変更できるので乗り越えられます。
が、私の様にさくらインターネットとか使ってるとIP変更は出来ないのでBANから立ち直る方法はありません。
ココは安全を考えるとやはりデスクトップからの操作になるのかな。

VBSとかはブラウザ自動操作時にPC占有されてしまうのが最大のネックですけど、1社のデータであれば20分もあれば余裕で採れるからタスクスケジュラーでPC終了含め組んでしまえばOKかなと。

まぁサーバー側で処理させてしまった方が楽なんですけどね。

まとめ

最近は クローラー対策が進んでいてスクレイピングが一筋縄ではいきません。
動的ページのスクレイピングではヘッドレスChromeが一番のツールになる様です。
これならWindows/Macどちらでも使えますし、Linax版もありますしね。

Goutteでも実装できている方、実装方法をご存知な方、いらっしゃいましたら是非教えてください。
よろしくお願いします。