我正在尝试使用机械化的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
输出“无”
因此,我将授予您,这一点很难弄清楚。不得不从字面上看一下mechanize
代码本身来弄清楚。不幸的是,我无法在没有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)
那应该为您工作。让我知道事情的后续。
问题内容: 我正在尝试使用机械化提交表单,但遇到了错误(TypeError:ListControl,必须设置顺序)。在谷歌搜索了一段时间并尝试了几种不同的解决方案后,我无法解决该问题。我正在尝试提交所有字段。 通过机械化获取的表单数据(对于br.forms()打印中的f:f) 我当前的代码 请您协助并检查我是否为表单选项使用了正确的语法。谢谢 问题答案: 栏位会要求您提供整数清单,但您只提供一个整
问题内容: 我想知道是否有类似Java的Perl / Python机械化的东西。 谢谢! 问题答案: 看看HtmlUnit。它类似于Perl的WWW :: Mechanize 。还有一个Perl版本,名为WWW :: HtmlUnit (它使用Inline :: Java 将Java库的方法公开给Perl)。
问题内容: 我正在尝试使用Python填写并提交表单,但无法检索结果页面。我已经尝试过机械化和urllib / urllib2方法来发布表单,但是都遇到了问题。 我要检索的表单在这里:http: //zrs.leidenuniv.nl/ul/start.php。该页面以荷兰语显示,但这与我的问题无关。可能值得注意的是,表单操作重定向到http://zrs.leidenuniv.nl/ul/quer
问题内容: 我有以下代码尝试使用进行一些验证样式。 我的课程尚未申请,我看不到原因。生成的html符合预期,其名称与表达式中的对应名称匹配。 当我将其复制到(不用于命名)之外时,它可以按预期工作。 问题答案: 发生这种情况的原因是,控件的名称(在其父窗体上注册该控件的名称)是在的实例化过程中检索到的, 根据文档 ,该名称发生在预链接阶段*之前(因此尚无内插法)。 如果您检查的属性,就会发现它确实具
问题内容: 我的网站上有一个严重的问题。在Google Chrome浏览器中,某些客户无法进入我的付款页面。尝试提交表单时出现此错误: 这来自JavaScript控制台。 我读到问题可能是由于隐藏字段具有必填属性。现在的问题是,我们使用的是.net Webforms必需的字段验证器,而不是html5必需的属性。 出现此错误的似乎是随机的。有谁知道解决方案吗? 问题答案: 如果表单字段验证失败,则在
问题内容: 我对python机械化的代理支持有疑问。我正在制作一些Web客户端脚本,我想在我的脚本中插入代理支持功能。 例如,如果我有: 如何在我的机械化脚本中添加代理支持?每当我打开此网站时,我都希望它通过代理。 问题答案: 您使用mechanize.Request.set_proxy(host,type)(至少从0.1.11开始) 假设运行在localhost:8888的http代理 应该管用