0

Python で mechanize を使用しようとしていますが、送信しようとしているフィールドに名前がないため行き詰まります。

機械化のチュートリアルでは、次のように述べられています。

br.select_form(name="order")
# Browser passes through unknown attributes (including methods)
# to the selected HTMLForm.
br["cheeses"] = ["mozzarella", "caerphilly"]  # (the method here is __setitem__)

これは問題ありませんが、私の場合、コントロールには名前がありません。これを確認するために実行するコードは次のとおりです。

resp = br.open("http://www.facebook.com/find-friends/browser/")
forms = ParseResponse(resp)
form = forms[2]  # I know I have to select form 2
for control in forms[0].controls:
    print control.name, control.type

そして、ここに私が得ているものがあります(部分的に):

fb_dtsg hidden
friends_ids[] checkbox
None button
None hidden
None text
hometown_ids[] checkbox
None button
None hidden
None text
city_ids[] checkbox
None button
None hidden
None text
highschool_ids[] checkbox
None button
None hidden
None text
college_ids[] checkbox

チュートリアルの例を適用できないため、ここで立ち往生しています(やりたいことは次のようなものです:

br['hometown'] = 'some town'

誰かが手がかりを持っていますか?

ありがとう

4

1 に答える 1

1

もともとこれをコメントとして投稿しましたが、回答であることが判明したため、回答として再投稿しています(ここで引用された質問へのリンクを@OPに感謝します)。

this other SO questionによると、インデックスでもコントロールを選択できるはずです。

br = mechanize.Browser()
br.open('http://www.w3schools.com/html/html_forms.asp')
myControl = forms[N].controls[n]

コメント「実際には、必要なコントロールにアクセスできるので便利ですが、それを変更する方法はわかりません。つまり、br['control'] = 'my value' と同等です」:

forms[N].controls[n] = myValue

ここからコピー:このチュートリアルを読んでください。

基本的な考え方は、インデックスでコントロールを取得し、必要な正当な値を直接設定できるということです

于 2012-07-24T17:10:45.867 に答える