【问题标题】:Use mechanize to submit form without control name使用 mechanize 提交没有控件名称的表单
【发布时间】:2012-12-07 13:36:01
【问题描述】:

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

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

我要编辑的控件是上述对象中的最后一个控件,&lt;TextareaControl(&lt;None&gt;=)&gt;

我查看了文档,但似乎无法找到为该控件分配值的方法,因为它没有与之关联的名称。

  forms = [f for f in br.forms()]
  print forms[2].controls[5].name

输出“无”

【问题讨论】:

    标签: python mechanize


    【解决方案1】:

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

    说实话,表单对象在可用性方面并没有很好地实现。我可以看到为您编辑无名表单控件值的唯一方法是使用 formset_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)
    

    这应该对你有用。告诉我进展如何。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-20
      • 1970-01-01
      • 1970-01-01
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多