強引に実現させました。よりスマートなやり方を模索中です。
この記事の方法で、basic 認証も無理やり入力しています。
自分の環境
Windows7Firefox 18.0.2
Selenium IDE 1.10.0 (結局この記事の方法では使いません)
Selenium Client & WebDriver Python 2.29.0
Python 2.7.3
まず最初に
とりあえずググったら以下のページを見つけました。
Seleniumの証跡をHTMLソースで
ここではアドオンのショートカットキー操作を、selenium で実現しています。
なるほど、こやつの応用で MHT 保存をショートカットキーで
実現できるかなぁと思い、以下のアドオンをインストール
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)を呼びだしてます。
ということで、以下のように仕組みづくり
- Slenium Web Driver を Python で使用
- Autoit で、第1引数に Firefox のウィンドウタイトル、第2引数に保存するファイル名を渡すようにし、Alt + Ctrl + w の操作からファイル保存までをスクリプトで作成し、実行ファイルにする(exe ファイル化)
- Python で Slenium を使いブラウザ操作をしつつ、MHT で保存したいページは 2 で用意した Autoit プログラムを実行!
Autoit は以下からインストール
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 の力を借りてます。