4

我正在尝试使用 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

输出“无”

4

1 回答 1

6

所以,我承认,这个很难弄清楚。必须从字面上看一下mechanize代码本身才能弄清楚。不幸的是,我无法在没有name属性的实际表单项上确定测试它,但如果您提供要拉取的站点,我可以这样做,或者您可以自己做。

实际上,表单对象在可用性方面并没有很好地实现。我可以看到为您编辑无名表单控件值的唯一方法是使用表单set_value方法

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)

这应该对你有用。让我知道事情的后续。

于 2012-12-23T06:14:35.057 回答