我试图使用mechanize for python来提交表单,但我需要填写的表单控件没有分配给它的名称。
<POST https://sample.com/anExample multipart/form-data
<HiddenControl(post_authenticity_token=) (readonly)>
<HiddenControl(iframe_callback=) (readonly)>
<TextareaControl(<None>=)>>
我尝试编辑的控件是上述对象<TextareaControl(<None>=)>
中的最后一个控件。
我查看了文档,似乎无法找到为该控件分配值的方法,因为它没有与之关联的名称。
forms = [f for f in br.forms()]
print forms[2].controls[5].name
输出&#34;无&#34;
答案 0 :(得分:6)
所以,我会批准你,这个很难弄清楚。不得不仔细看看mechanize
code itself来弄明白。不幸的是,我无法在没有name
属性的实际表单项上测试它,但是如果你提供你想要提取的网站,我可以这样做,或者你可以自己做。
诚实地,表单对象在可用性方面没有得到很好的实现。我可以看到编辑无名表单控件值的唯一方法是使用表单的set_value
method:
class HTMLForm:
# <...>
set_value(value,
name=None, type=None, kind=None, id=None, nr=None,
by_label=False, # by_label is deprecated
label=None)
所以,你在这里设置你正在寻找的控件是使用nr
参数来获取它,使用表单中控件的索引。不幸的是,你不能使用负整数从后面抓取控件,所以要抓住最后一个表单,你必须按照nr=len(myform.controls)-1
的方式做一些事情。
在任何情况下,你可以在这里做的是使用set_value
方法,你应该这样设置:
forms[2].set_value("LOOK!!!! I SET THE VALUE OF THIS UNNAMED CONTROL!",
nr=5)
这应该适合你。让我知道它是怎么回事。