「パスワードを入力しダウンロード」を自動化


kienuというファイルアップローダーで，パスワードを入力しダウンロードする作業を自動化したいと思っています．  
web上ではフォームにパスワードを入力し，送信すると自動的にダウンロードが開始されます．  
例えば以下のリンクでは「full123」と入力し，DOWNLOADボタンをクリックします．  
<https://kie.nu/22W5>

pythonのmechanizeでフォームに入力しsubmit()すれば，その時点でダウンロードが開始されるだろうと思ったのですが，できませんでした．

[code]

    import mechanize
    
    url = "https://kie.nu/22W5"
    
    def kienu(password):
        br = mechanize.Browser()
        br.open(url)
        br.select_form(nr=0)
        br["passwd"] = password
        br.submit()
    
    kienu("full123")
    
[/code]

なにか良い方法はありませんか？  
mechanizeでなくても，目的が達成できればどのような方法でも構いません．




`.submit()`はファイル内容やヘッダを`urllib2.urlopen()`のようにオブジェクトで返します。  
中身さえ得られれば良いのならば、関数の最後を

[code]

        return br.submit().read()
    
[/code]

などとすれば良いかと思います。  
ファイル名が必要であればヘッダの`Content-
Disposition`をパースする必要がありますが、それに`cgi.parse_header`が使えるようです。

[code]

        r = br.submit()
        return (cgi.parse_header(r.info().getheader("content-disposition"))[1]["filename"], r.read())
    
[/code]

ファイルサイズが小さければこんな所でしょうか。  
<https://stackoverflow.com/a/27840405>  
しかし、大きい場合は一気に読まず、ファイルに書き出した方が良いかもしれません。  
＃`read()`はファイルなどと同じく読み込みサイズを指定できます  
なお蛇足ながら、得られたファイル名にはそのまま使わない方がよい文字種などが含まれる可能性がありますので、場合によっては何らかの変換など行った方が良いかもしれません。




よく引っかかるのは次の2パターンではないでしょうか。

## javascriptが有効でないと利用できない

ブラウザのjavascriptを無効にして確認することが出来ます。

mechanizeはjavascriptが解釈できないはずなので、javascriptが解釈できるツールを使うか、自力でjavascriptの動作をエミュレーションする必要があります。

埋め込みのjavascriptソースで確認できる簡単な処理であれば自力で処理した方が早いかもしれません。ただし、相手側でそこを変更されるとそれに追随しなければなりません。

## 送信する内容が不足または相違している

コメントでも指摘がありますが、ブラウザで表示される入力欄だけでなく、hidden要素やCSSで非表示にされている要素の内容も送信しなければならない場合があります。

Referer:、User-Agent:、Cookieなどがチェックされていることもあります。

ブラウザで正しく操作した場合に送信されている内容を確認し、それに極力合わせるのがよいでしょう。

