masalibの日記

システム開発、運用と猫の写真ブログです

puppeteerでクリックしてCSVをダウンロードする

f:id:masalib:20180714012044j:plain
普通のブラウザならクリックしてファイルをダウンロードするとは当たり前にできる事です
自分の記憶だと1995年ぐらいからできた。


ただブラウザの自動化ツールのpuppeteerでやるのは大変なのです
クリックイベントを起こして新しいターゲットが作成されたイベントを拾ってきて
その結果をバイナリ保存する・・・面倒くさい!!
でも結果をCSVで保存とかどのシステムでもあるので今後のためにもマスターしたい

puppeterとは

google先生がつくったchromeの操作ツール
github.com


ソース


解説

その1・新しいターゲットが発生したとき 7行目
browser.on('targetcreated', async (target) => {

これは 新しいタブを開くなどのターゲットが増えた時のイベント

その2・必要なイベントを無視している 8〜12行目
let s = target.url();
//初期に開くabout:blankは無視する
if (s == 'about:blank') {
               return;
}

puppeteerの初期でも新しいターゲットのイベントが発生するのですが
これは必要ないイベントなので無視する

その3・ダウンロード部分 13〜20行目
s = s.replace("data:application/csv;charset=utf-8,", "");
s = s.replace(/%2F/g, "/");
s = s.replace(/%2C/g,",");
s = s.replace(/%22/g,'"');
s = s.replace(/%20/g," ");
s = s.replace(/%0A/g,"\n")
s = s.replace(/%0D/g,"");

ここが重要でs = target.url()CSVのダウンロード文字列がとれる
必要なデータ以外を削除している
納得がいかない部分だけどこれで CSVがダウンロードできる
自動化をするツールを作ることが今後、増えそうなので忘れないようにしたい