印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
MacWindows Selenium IDE で明細書のダウンロードを半自動化する

Firefox に Selenium IDE 拡張を導入して,領収書や明細書のダウンロード作業を省力化する。

■ ■ ■

はじめに

クレジットカード会社や電話会社,銀行などでは,領収書や明細書の郵送をやめてオンラインでダウンロードさせるところが増えてきた。紙がなくなった分,エコロジカルではあるが,手間がかかるのが難点である。さらに,期限付きでどんどん消えてしまうというのも悩みのタネである。定期的にアクセスしてダウンロードしなければならない。しかもサイトによって明細書が何種類にも分かれていたり,アクセスページが複数あったり,ブラウザの「戻る」ボタンを押すと「セッションの期限切れ」とか出てログインからやり直しさせるなど,手に負えない。

そこで,Firefox の Selenium IDE アドオンを使って,ダウンロードを半自動化することにした。かなり上手くいくが,失敗することもある。回線速度やパソコンの処理能力も影響するので,完全自動化とはならない。しかし,一度設定ファイルを作っておけば,途中で失敗しても手順が記述してあるので,単純なキー操作だけでダウンロードを完了させることができる。

心理的なイライラはかなり軽減できる。

動作環境

動作環境は MacBook Pro, Mac OS X 10.11.4 El Capitan, Firefox 47.0, Selenium IDE 2.9.1 である。

Selenium IDE

Selenium は,Web アプリケーションのテストを自動化するためのツールである。マルチプラットフォームで,Windows, Mac, Linux で動作する。もともとは Firefox の拡張機能だけだったが,Chrome や IE などのブラウザでも動作するエンジンが開発され,多くのプログラミング言語のためのインターフェース Selenium WebDriver も用意された (イマドキのIDE事情 (157) SeleniumでWebアプリケーションのテストを自動化しよう | マイナビニュース)。この記事では,Firefox で動作する GUI ツールの Selenium IDE を使う。

最終的な目標としては,Linux サーバに Selenium WebDriver を入れておいて,cron で1か月に1度起動して明細書ダウンロードを完全自動化することであるが,かなり高いハードルとなりそうなので,ここでは GUI でお茶を濁すことにする。

Firefox の Selenium IDE アドオンは Selenium IDE :: Add-ons for Firefox からダウンロードできる。

困ったときは,Selenium な人たちが集まる 日本Seleniumユーザーコミュニティ というのもあるようなので,聞いてみるのもありかも。

テストケースの作成

1つのサイトで行う一連の手順を「テストケース」,テストケースをいくつかまとめたものを「テストスイート」と呼ぶ。ここで扱うのは「テストケース」である。

Selenium IDE
Selenium IDE


Selenium IDE アドオンをインストールすると,Firefox のツールバーに「Se」というアイコンができる。これをクリックすると Selenium IDE のウィンドウが開く。

Selenium IDE の優れた点は,ブラウザで行った操作をそのまま記録することができ,それをそのままボタンひとつで再生することができることである。操作の記録は HTML で記述されているので,テキストベースでの編集が可能である。

実例

実際の例として,NTT ファイナンスの Web ビリングサービスから明細等をダウンロードすることにする。NTT の請求は NTT ファイナンスが行っているのである (nlog(n): NTT の @ビリングと Web ビリング)。ダウンロードできるファイルは,ひと月分あたり3つあるいは4つである。

  • 詳細内訳 (PDF 形式)
  • 詳細内訳 (CSV 形式)
  • 請求概要 (PDF 形式)
  • 請求書に同封の小冊子 (PDF 形式) ←あったりなかったり

ファイル名は,「詳細内訳PDF」が「yyyyMMeb電話番号b.PDF」,「詳細内訳CSV」が「yyyyMMeb電話番号w.txt」,「請求概要PDF」が「yyyyMMeb電話番号a.PDF」となっている。

NTT のウェブサイトの問題は,これらのファイルが1つのページから全部アクセスできるのならいいのだが,それぞれ別のページに遷移しなければならず,さらに JavaScript が仕込まれているという具合に変態さ加減が炸裂しているということ。そのため,wget で取得するというようなことが極めて困難であり,Selenium IDE に頼らざるを得ないという状況なのである。トラップの多い暗闇の中,Selenium IDE の光が差し込んだのである。Selenium IDE ありがとう! NTT のサイトは意地が悪すぎ! docomo も似てるよ!

テストケースの記録

「アクション」メニュー→「テストの記録」,またはウィンドウの右上にある赤い「●」をクリックすると,記録が始まる。ブラウザを操作して,ログイン,画面遷移,ファイルのダウンロード,ログアウトを行う。「ログインID」と「ログインパスワード」はブラウザに記憶させておくとする。以下のようなファイルができあがる。文字コードは UTF-8 になっている。

テストケース: bill.ntt-finance.co.jp.html.txt

このファイルをダウンロードして,拡張子の .txt を削除すればそのまま使える。ただし,「小冊子」には対応していない。NTT のサイトは仕様変更がたまにあるので,すぐに使えなくなる可能性もある。オウンリスクでご利用ください。

テストケースの再生

テストケースを再生するとき,デフォルトで「Fast」になっているスライダを「Slow」にした方が成功率が高い。

途中で止まってしまった場合は,1行ずつ手動で実行する方法に切り替える。「x」キーを押せば実行,「↓」キーを押せば次の行に移る。したがって,失敗したら「x↓x↓x↓」とキー入力をしていけば完了する。

テストケースの編集

テストケースを実行して,一定時間待たせたい場面が出てきたら pause を挿入するとよい (Selenium Reference)。

複数月分の明細を取得するのは高度である。頑張るとループ処理もできるようだが (アイフラッグラボ(アイフラッグ)| Selenium IDEのループ処理),その努力は報われなさそう。

Y!moble の場合

Y!mobile の明細書もいろいろと問題がある。まず一番目の問題は,ダウンロードするファイル名が,「ダウンロードした日付時刻」が埋め込まれたものになっているということである。ファイル名には末尾に日付時刻が「yyyyMMddHHmmss」の形式でつく。これは,ダウンロードしたファイル名が重複しないということがもしかすると利点かも知れないが,「何年何月分の明細」かが分からないという大きな欠点となっている。利用者にとってはダウンロードした日付は重要ではない。2回同じものをダウンロードしてしまっても上書きするか捨てるかすればいいだけだからである。ファイル名にダウンロードした日付時刻が入っているだけだと,何月分の明細かが分からないだけでなく,ファイル名を変更しなければならないという手間も発生する。

二番目の問題は,Windows PC でダウンロードすると気がつかないが,Mac でダウンロードするとファイル名が文字化けすることである。以下が文字化けファイルの対応表である。

Webページ名 Windowsファイル名 Macファイル名
ご請求内訳 電話料金内訳明細書yyyyMMddHHmmss.PDF db¿ààó¾×yyyyMMddHHmmss.PDF
領収情報 領収書yyyyMMddHHmmss.PDF ÌûyyyyMMddHHmmss.PDF
通話料 通話料明細書yyyyMMddHHmmss.PDF Êb¿¾×yyyyMMddHHmmss.PDF
パケット通信料 パケット通信料明細書yyyyMMddHHmmss.PDF pPbgÊM¿¾×yyyyMMddHHmmss.PDF

Windows, Mac のいずれでもファイル名の変更は必要になるのだが,ファイルを開いてみないとファイルの中身が分からないという点で Mac の場合は非常に不便なことになっている。

まとめ

テストケースをひとつずつ作っていくのは手間だが,1回作ってしまえばしばらくの間は使えるのでお勧めである。この「半自動化」はかなり有効に働くが,「毎月必ず1回行わなければならない」という欠点がある。当月1か月分のダウンロードができるだけで,前月のダウンロードには対応していない。

Posted by n at 2016-06-17 22:40 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?