ブラウザ操作を自動化してみよう、ということでGoogle ChromeとWordPressを組み合わせた変態的な自動操縦に成功しました!
Chromeの拡張機能でブラウザの自動操縦できる拡張は存在するのですが、データを外部に送信することができないんですね。
なので、あくまでも操作の記録と再生のみです。
よって単純な繰り返し処理しかできません。
しかし、データを外部、つまりWordPressなんかに送信できると色んなことができちゃいます。
条件判定で次の操作を変更したり、記録することができます。
データを外部に送信する方法ですが、普通にPOST形式やajaxで送信できません。
クロスドメイン問題というセキュリティの壁があるからです。
そこで、どうするかというとGET形式による送信です。
やり方としてはJavaScriptでscriptタグを生成して、その際src属性にWordPressのURLを指定します。
src属性のURLのクエリーにパラメータを指定することでWordPressにデータを送信できます。
データはJSON形式に変換して、URIエンコードをかけておきます。
難しかったのがGET形式の最大文字数制限です。
GET形式で送れる文字数がブラウザによって最大2048文字だったりします。
なので2048文字を超えると送信できないので、それ以上になる場合は分割して送信する必要があるんですね。
パケットに分けて送信して、WordPress側で分割したパケットをチェックサムの多段処理で復元します。
今回、ブラウザの自動化で有名なSeleniumと同じようなことがJavaScriptで実現できたことは大きな成果でした。
ここで、Google ChromeとWordPressを組み合わせた変態的な自動操縦のなにがすごいのかお気付きの方もいると思います。
これができるようになると、今流行のJavaScriptのフレームワークで開発されたサイトをスクレイピングできるようになります。
最近のサイトはVueとかreactといったフレームワークで開発されているので、DOMのレンダリングエンジンを積んでいないPHPではスクレイピングできないんですね。
しかし、ブラウザが操縦できればDOMのレンダリングは可能です。
例えば、今年の10月にメルカリのPC版がモバイルアプリ版と統合が進み、普通の方法でスクレイピングができなくなりましたが、上記の方法を使えばスクレイピングが可能です。メルカリの自動操縦も可能です。
純正のブラウザを使用しているので、ツールとしての痕跡がほぼ残らないのも特徴です。
例えば、オンライントレードにも利用できます。デイトレードの高速取引には向きませんが、株の値動きをTwitterやInstagramからトレンドデータを取得して分析・予想し、株の売買をする、なんていうことも可能です。
ポイントは連携していないサービスとサービスをIFTTTみたいに連携させることができることです。
で、なによりなぜかWordPressを使うことで自動操縦のスクリプトを秘匿化しやすいことです。
自動操縦のツールとして渡してしまうとなにかと問題が起きてしまうのですが、操縦するためのスクリプトは特定のWordPressからしかホストされないようにすればツール本体を渡さずに、ツールをクライアント化できます。
もちろん取得先のサイト構造が変化した際の修正もWordPress側で可能です。
アップデート版を再配布する必要がありません。WindowsやMacも関係なし。
さらに、複数のクライアントで取得したデータをWordPress側で集約・共有して、再配布することもできます。
WordPress関係の仕事で納品したクライアントに専用のChrome拡張を渡せばアフターフォローに使えるかも。