1

Python を使用してこのフォームに入力したい:

    <form method="post" enctype="multipart/form-data" id="uploadimage">
  <input type="file" name="image" id="image" />
  <input type="submit" name="button" id="button" value="Upload File" class="inputbuttons" />
  <input name="newimage" type="hidden" id="image" value="1" />
  <input name="path" type="hidden" id="imagepath" value="/var/www/httpdocs/images/" />
</form>

ご覧のとおり、まったく同じ名前の 2 つのパラメーターがあるため、Mechanize を使用してそれを行うと、次のようになります。

    import mechanize
    br = mechanize.Browser()
    br.open('www.site.tld/upload.php')
    br.select_form(nr=0)

    br.form['image'] = '/home/user/Desktop/image.jpg'
    br.submit()

エラーが発生しています:

mechanize._form.AmbiguityError: more than one control matching name 'image'

インターネット (このサイトを含む) で見つけたすべての解決策は機能しませんでした。別のアプローチはありますか?残念ながら、HTML フォームの入力の名前を変更することはできません。

前もって感謝します。

4

1 に答える 1

0

find_control代わりに使用する必要があります。あいまいさがある場合は、キーワードを追加しnrて特定のコントロールを選択できます。あなたの場合、nameandtypeキーワードで十分です。

valueまた、ファイル コントロールは;を使用しないことに注意してください。代わりに使用add_fileして、開いているファイル オブジェクトを渡します。

br.form.find_control(name='image', type='file').add_file(
    open('/home/user/Desktop/image.jpg', 'rb'), 'image/jpg', 'image.jpg')

mechanize のフォームに関するドキュメントを参照してください。

于 2012-06-30T22:09:01.830 に答える