はじめに
あのボタンを買ったのはよいけど、肝心のいつも使ってるあのサイトがAPIを提供していない!
昨今はだいぶAPIは公開されていますが、まだまだ非公開/非対応というのはよくある話でそんなサイトへのアプローチです。
構成
上記の通り、最終的にはLambdaからSeleniumを経由することでブラウザでの操作を再現します。
ブラウザ操作なのでほぼすべてのサイトに対応できます。
Lambdaの作成
実際に行いたい操作だけを手元にご用意ください。
driver.find_element_by_xpath("//input[@type=\"submit\"").click()
この際注意点として、絶対にIDやパスワードなどの固有情報を含めないでください。(構成をそのまま再現するとGithubなので悪用される恐れがあります。)
※クレデンシャル情報の類いをよりセキュアにするためにはAWS Secrets Managerの利用も検討の余地有り。この記事では非複数管理&個人ユースのため使用しません
必要な場合は以下例のように【キー】を必要な分だけ用意することで外部から注入できます。
def lambda_handler(event, context):
event['placementInfo']['attributes']['【キー】']
ビルド
実行用に依存解消したものを作るフローは以下を参考にしてください。
Chrome headlessをLambdaで動かす際の依存解消にCodebuildを使う
設定値の注入
以下の記事を参考に設定
https://blog.soracom.jp/blog/2018/11/07/tips-of-soracom-lte-m-button/
終わりに
私は勤怠サービスへ操作をさせてます。回線依存なしにどこでも使えて最高です。
対向は何でもいいので、ほかにも応用先を検討中