Firebase(Cloud Functions)+Node.js+Puppeteerでスクレイピングを試みたけどあきらめた。
こちらの記事の続きです。
背景
GoogleAppsScrpitでのスクレイピングが、ある時を境にレスポンスが403しか帰ってこなくなってしまった。
GoogleAppsScriptはUserAgentを変更することができず、特定されやすいために対策されたと思われる。
やはりサーバーを立てるしかないのか…と調べていたところ、サーバーレスでこれまでの機能を実装が可能であることがわかった。
使用する技術
Firebase
Googleの提供するサーバーレスサービスで、とりあえずいろんなことができる。
今回はCloud Functionsを使用。Cloud FunctionsはAWSでいうところのLambdaみたいなもの。
一部有料だが、個人が利用する分には月に10円もかからないとのことだったので利用することにした。
参考:Cloud Functions の概要
Firebaseの環境構築方法はこちら
参考: 【Firebase】Cloud Functions チュートリアル
Node.js
Javascriptをサーバサイドで運用するためのモジュール
参考: Node.js
Puppeteer
読みは多分パペッター(パペッティア?)
Node.jsで動くヘッドレスchromeブラウザ
DOM操作やボタンクリック、スクリーンショットの保存も可能。
手動でブラウザを触っているような感覚でプログラムを組んで操作できる。
参考: Puppeteer
LINE Notify
POSTでLINEに通知する機能
Node.jsの環境下で利用するためには別途モジュール(axiosとquerystring)が必要っぽい
所感
Puppeteerでいろんなことができそうだと思った。
例
- 速度テスト
- ブラウザでの操作自動化(会員登録、テスト注文等)
- 全ページをスクリーンショット
今回、対象サイトをスクレイピングして在庫ありなしチェック、という仕組みを実装しようとしていたが
ブラウザの操作を自動化できるのであれば、在庫ありなら購入完了までやってしまうというのもアリなのではと思った。
あきらめた
プログラムを試しに書いてみて、いざデプロイをしようとしたところで、原因不明のデプロイできないエラーが発生してしまった。
また、この間に欲しい商品を手に入れることができてしまったため、実装を見送ることになった。
Discussion