ちくわ

ちくわにきゅうりを入れるとうまい

Selenium を使用しページを MHT 形式で保存する

強引に実現させました。よりスマートなやり方を模索中です。

この記事の方法で、basic 認証も無理やり入力しています。

自分の環境

  Windows7

Firefox 18.0.2

Selenium IDE 1.10.0 (結局この記事の方法では使いません)

Selenium Client & WebDriver Python 2.29.0

Python 2.7.3

まず最初に

とりあえずググったら以下のページを見つけました。

Seleniumの証跡をHTMLソースで

http://tanakanbb.blogspot.jp/2010/04/seleniumhtml.html

ここではアドオンのショートカットキー操作を、selenium で実現しています。

なるほど、こやつの応用で MHT 保存をショートカットキーで

実現できるかなぁと思い、以下のアドオンをインストール

UnMHT

http://www.unmht.org/unmht/

で、UnMHT の設定で以下の Alt + Ctrl + W (適当) を割り当てて、

Selenium で controlKeyDown とか keyPress とか設定しつつ試行錯誤してみるが...

できない...orz

なぜだか分かりませんが自分の環境ではできませんでした。

別の方法を模索

以下のページをヒントにしました。

Selenium を使用して Web テストを自動化する

http://www.ibm.com/developerworks/jp/opensource/library/os-webautoselenium/

└ ファイルのアップロード/ダウンロードのウィンドウの処理方法

ここでは Selenium IDE ではなく、RC コードを使い、特定の言語から別のアプリケーション(Autoit)を呼びだしてます。

ということで、以下のように仕組みづくり

  1. Slenium Web Driver を Python で使用
  2. Autoit で、第1引数に Firefox のウィンドウタイトル、第2引数に保存するファイル名を渡すようにし、Alt + Ctrl + w の操作からファイル保存までをスクリプトで作成し、実行ファイルにする(exe ファイル化)
  3. Python で Slenium を使いブラウザ操作をしつつ、MHT で保存したいページは 2 で用意した Autoit プログラムを実行!

Autoit は以下からインストール

Autoit

http://www.autoitscript.com/site/autoit/

そして Autoit のスクリプトはこんな感じになりました。

firefoxmht($CmdLine[1], $CmdLine[2])

Func firefoxmht($title, $filename)

If WinWait($title,"",300) Then

Send("{ALTDOWN}{CTRLDOWN}w{ALTUP}{CTRLUP}")

WinWaitActive("保存オプション")

Send("{ENTER}")

WinWaitActive("MHT で保存")

Send($filename)

Send("{ENTER}")

Else

Return False

Endif

EndFunc

ウィンドウのタイトルは、Autoit をインストールすると一緒に入る Window Info なるツールを使うと簡単に使えます。また、スクリプトの作成はこれまた一緒に入る Au3Record.exe を使用しました(※)。

※この Au3Record のツールは、スタートメニューに現れず、Program file にひっそりと?入ってます。

自分の環境では以下にありました。

C:\Program Files\AutoIt3\Extras\Au3Record

最後に

ということで、以上の仕組みで現在 MHT 保存は無理やり自動化していますが、改良の余地はかなりありそう。

Python 単体で MHT の保存ができればいいんですが、開発スキルは無いので Autoit の力を借りてます。