mechanizeちょうべんり
長い休み明けぐらいはまともな記事で。
はてブやらtwitterやらは記事をまとめて書く気力を失わせるな…
最近、業務でサイト上での作業の自動化を検討してたところ、見つけたのがmechanize。
元は
perlのWWW::Mechanizeをpythonに移植したもので、要はブラウザの動作をスクリプトでシミュレートするというもの。
これを使うとurllib2あたりで一々GET/POSTを書かなくても、「ここをクリックしてこのフォームに文字を入力…」みたいな感覚でWebサーバとのアクセスをスクリプトで記述できる。
使い方は本家サイトや後述するサイトを参考して頂くとして、簡単なTipsを。
ファイル選択フォームを使ってファイルをアップロードしたい
Formでファイル入力タイプの項目(input type="file")があった場合はadd_file()メソッドを使う。
from mechanize import Browser br = Browser() br.open("http://www.example.com/") # 使うフォームを指定 br.select_form(nr=1) # フォームにファイル情報をセット br.form.add_file(open("hoge.txt"), "text/plain", "hoge.txt") br.submit()
引数は見ての通りファイルオブジェクト、MIME type、ファイル名の順。
注意点として、バイナリファイル(excelファイルとか)を送信する場合はちゃんとバイナリモードで開く事を忘れないこと。俺は見事に嵌りました。
br.form.add_file(open("hoge.xls", "rb"), "application/vnd.ms-excel", "hoge.xls")
何やっても500が返ってくるからしばらく悩みまくった…
デバッグのためにhttpヘッダなどを表示させたい。
set_debug_http()を使う。
br.set_debug_http(True)
出力先はstdout。
リダイレクトや応答のログ落としにはset_debug_redirects()やset_debug_response()を使う。
フォーム項目がreadonlyで入力しようとしてもエラーになる
mechanizeを使ってreadonlyのフィールドに無理やり値をセットするサンプル - bonlife
参考。
id:bonlife GJ!
あとはpydocでも読んでください。(なげやり)