puppeteer でファイルをダウンロードするときに、任意のパスと名前を指定して保存する

Puppeteer を使ってファイルをダウンロードする際に、任意のパスと名前で保存したい。

残念ながら、 現時点ではシンプルな方法は提供されていないようだ。
以下の Issue で何年にもわたって議論されているものの、 「コレ!」 という解決方法は無さそう。
Question: How do I get puppeteer to download a file? · Issue #299 · puppeteer/puppeteer

しかし、 この Issue の #issuecomment-668087154 のコメントで、 なかなか泥臭い方法で実現するヒントが書かれていた。
これを参考にして、任意のパスと名前でダウンロードファイルを保存してみよう。

実行方法

あらかじめ、 puppeteer の npm パッケージをローカルにインストールしておく。

npm install puppeteer --save

その状態で、後述の .js ファイルを nodejs で実行すれば OK だ。

node puppeteer-download-with-specify-name.js

コードと解説

続きを読む

Linux や Windows で大量の nanaco ギフトを自動登録して、オトクに税金を支払う

簡単に使用できる GUI 版を作成したので、そちらの記事も参照 。


突然だが、自動車税や固定資産税などの税金を、どのように支払っているだろうか?
支払う額も大きくなりがちなので、なるべくお得に支払いたいのではないだろうか。

そこでオススメなのが nanaco ギフト だ。

クレジットカードで直接納税したり nanaco 残高にチャージする場合、手数料がかかったり、ポイントがたまらなかったりと、あまりお得にならない。
しかし nanaco ギフトであれば、額面よりも安く入手する手段が知られている。

  • ベネフィット・ステーション
    • 福利厚生型の会員制割引サービス。
    • 2020年4月現在、 毎月 10万 円分まで 額面の 2% OFF で nanaco ギフトを購入できる。
    • 所属組織による団体加入か、 「ベネフィット・ステーション プライベート」 や 「デイリーPlus」などといった個人向けの有料サービス、 「(JACCS カードの) J’s コンシェル」などの付帯サービスで利用できる。
  • Kiigo (廃止)
    • 以前はクレジットポイントを貯めながら nanaco ギフトを購入できたのだが、 2019年 に nanaco ギフトの取り扱いがなくなってしまった。
  • また nanaco 残高と違ってセンターお預かりへのチャージなので、 チャージ残高の上限が非常に高く (50万円以上も可能らしい)、 nanaco 残高のチャージ上限である 5万円を超えるような金額の支払いでも使える大きなメリットがある。

    nanaco ギフトでのお得な納税の話は、他のサイトでもっと詳しくわかりやすく書かれているだろうから、これくらいにしておく。

    nanaco ギフトの登録がめんどくさい

    さて、 ここからが本題だ。

    そんな nanaco ギフトにもひとつ 大きな欠点がある。
    それは、 1,000 円単位で提供されることが多い ということだ。

    例えば 10万円分 チャージしようとすると、 100 回も nanaco ギフトID のコードを入力しなくてはならないのだ。

    更に、 nanaco ギフトの登録を行う UI が、大量のギフト登録に とても優しくない
    1回 コードを入力する毎に nanaco にログインしたり、 コードを 4文字 ずつテキストボックスに入力しなくてはならなかったりと、 数をこなすのにとにかく手間がかかるのだ。

    10万円 の納税で 2,000円 得するために、 2,000円分 相当以上の手間をかけるのでは愚の骨頂だ。
    こうなったら、自動入力させるしかない。

    続きを読む

    Selenium でページ全体のスクリーンショットを撮る (Python)

    02/25 更新: Chrome で水平スクロールバーがスクリーンショットに写ってしまう問題を修正。

    Selenium を使って自動テストを行っていると、表示された結果のスクリーンショットを撮って保存したい時がままある。

    ところが、 Chrome や Firefox で Selenium のスクリーンショット機能を使うと、 ウィンドウに表示されている内容だけしか取得できない。
    (ブラウザやそのバージョンによって動作が異なる)


    この記事によると、これは Selenium の仕様らしい。

    ブラウザごとの挙動の差はさておき、 ウィンドウサイズでの取得となってしまう Chrome と Firefox で、何とかページ全体のスクリーンショットを保存したい。
    ここでは、 Selenium の Python Binding を使って、実現する方法を考えてみる。

    続きを読む