gpt4 book ai didi

Python mechanize - 两个类型为 'submit' 的按钮

转载 作者:IT老高 更新时间:2023-10-28 22:15:35 25 4
gpt4 key购买 nike

我有一个用 python 编写的 Mechanize 脚本,它填写了一个网络表单,应该点击“创建”按钮。但是有一个问题,表单有两个按钮。一个用于“添加附件”,一个用于“创建”。两者都是“提交”类型,附加按钮是列出的第一个按钮。因此,当我选择论坛并执行 br.submit() 时,它会单击“附加”按钮而不是“创建”。广泛的谷歌搜索对于选择表单中的特定按钮没有任何用处。有谁知道跳过第一个“提交”按钮并单击第二个的任何方法?

最佳答案

我尝试使用 nr 参数,但没有任何运气。

我能够让它与名称和标签参数的组合一起使用,其中“标签”似乎对应于 HTML 中的“值”:

这是我的两个提交按钮:

<input type="submit" name="Preview" value="Preview" />
<input type="submit" name="Create" value="Create New Page" />

...这是点击第一个,返回,然后点击第二个的代码:

from mechanize import Browser
self.br = Browser()
self.br.open('http://foo.com/path/to/page.html')
self.br.select_form(name='my_form')
self.br['somefieldname'] = 'Foo'
submit_response = self.br.submit(name='Preview', label='Preview')
self.br.back()
self.br.select_form(name='my_form')
self.br['somefieldname'] = 'Bar'
submit_response = self.br.submit(name='Create', label='Create New Page')

还有一个对我也有用的变体,其中提交按钮的“名称”是相同的,例如:

<input type="submit" name="action" value="Preview" />
<input type="submit" name="action" value="Save" />
<input type="submit" name="action" value="Cancel" />

self.br.select_form(name='my_form')
submit_response = self.br.submit(name='action', label='Preview')
self.br.back()
submit_response = self.br.submit(name='action', label='Save')

重要提示 - 我只有能够在清理页面其余部分的一些 HTML 之后让任何这个多提交按钮代码工作。

具体来说,我无法拥有 <br/> - 相反,我必须拥有 <br /> ...而且,更没有意义的是,我在两个提交按钮之间没有任何东西。

我找了两个多小时的 mechanize/ClientForm 错误归结为:

<tr><td colspan="2"><br/><input type="submit" name="Preview" value="Preview" />&nbsp;<input type="submit" name="Create" value="Create New Page" /></td></tr>

(都在一行上)不起作用,但是

<tr><td colspan="2"><br />
<input type="submit" name="Preview" value="Preview" />
<input type="submit" name="Create" value="Create New Page" /></td></tr>

工作正常(多行,这也不重要)。

我喜欢 mechanize 因为它很容易安装(只需将文件复制到我的包含目录中)并且因为它非常易于使用,但除非我缺少重要的东西,否则我认为像这样的错误有点可怕 -我想不出一个很好的理由为什么第一个例子应该失败而第二个应该工作。

而且,顺便说一句,我还发现了另一个 Mechanize 错误,其中 <textarea>包含在 <p> 中未被识别为有效控件,但一旦将其从 <p> 中取出容器它被识别得很好。我检查了, textarea is 允许包含在其他 block 级元素中,例如 <p> .

关于Python mechanize - 两个类型为 'submit' 的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/734893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com