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

投稿者: Anonymous

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

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

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")

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

解決

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

    return br.submit().read()

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

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

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

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *