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 回答