#実現させたいこと
とあるサイトのマイページから、データを毎日ダウンロードしたい。しかし、ダウンロードには1,000クリック程度必要。
画面が遷移してもURLが変わらないので、SeleniumやPRAでの実現は難しい。
Chrome操作の自動化ができ、さらにExcelマクロのような録画ツールもあるそうなので、puppeteerを試してみた。
環境構築と習得に1日ほどかかったが、使いやすくて感動!
#puppeteerとは
Chromeブラウザを操作できるNode.jsのライブラリ
ヘッドレスブラウザを使用できるので高速
#Headless Recorderを使う
HeadlessRecorderをChromeの拡張機能に追加。
録画ボタンを押して、録画したい操作をすると、Puppeteerコードを出力してくれる。
puppeteerで必要なidやclassを調べる手間が省けて便利。
#Headless Recorderでできなかったこと
##①録画が上手くいかない箇所があった
idやclassが一意でない箇所で、コードに落とせていない操作があった。
お客様番号を使って指定できそうだったので、お客様番号を含むXpathで指定した。
const customerNumber = '123456'; //文字列型で店舗番号を指定
const customerLink = "//a[contains(@onclick,customerNumber)]"; //XPathを検索
await page.waitForXPath(customerLink);
const customerLinkClick = await page.$x(customerLink);
await customerLinkClick[0].click();
##②ダウンロード先の指定
const downloadPath = 'C:\\yyy\\xxx\\test'; // 絶対パスで指定
await page._client.send(
'Page.setDownloadBehavior',
{ behavior: 'allow', downloadPath: downloadPath }
);
感想
・学習コストは低め。PythonとGASしか使ったことがない私でも、環境の設定からはじめて、1日あれば使えた。Headless Recorderが偉大。