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

ada*_*101 4 python mechanize

我正在尝试使用mechanize for python来提交表单但是我需要填写的表单控件没有分配给它的名称.

<POST https://sample.com/anExample multipart/form-data
  <HiddenControl(post_authenticity_token=) (readonly)>
  <HiddenControl(iframe_callback=) (readonly)>
  <TextareaControl(<None>=)>>
Run Code Online (Sandbox Code Playgroud)

我正在尝试编辑的控件是上面对象中的最后一个控件<TextareaControl(<None>=)>.

我查看了文档,似乎找不到为该控件赋值的方法,因为它没有与之关联的名称.

  forms = [f for f in br.forms()]
  print forms[2].controls[5].name
Run Code Online (Sandbox Code Playgroud)

输出"无"

jdo*_*dot 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)
Run Code Online (Sandbox Code Playgroud)

那么,你在这里设置你正在寻找的控件是使用nr参数来获取它,使用表单中控件的索引.不幸的是,你不能使用负整数从后面抓取控件,所以要抓住最后一个表格你必须做的事情nr=len(myform.controls)-1.

在任何情况下,你可以在这里做的是使用该set_value方法,你应该设置,如下:

forms[2].set_value("LOOK!!!! I SET THE VALUE OF THIS UNNAMED CONTROL!", 
                       nr=5)
Run Code Online (Sandbox Code Playgroud)

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