使用mechanize提交没有控件名称的表单

时间:2012-12-20 04:23:15

标签: python mechanize

我试图使用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;

1 个答案:

答案 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)

这应该适合你。让我知道它是怎么回事。