Python 机械化提交

Python 机械化提交,python,testing,mechanize,Python,Testing,Mechanize,我们有一个表单,它有几个单独的提交按钮,可以执行不同的操作。问题是我有几个按钮,它们具有以下HTML: <input type="submit" name="submit" value="Submit" class="submitLink" title="Submit" /> <input type="submit" name="submit" value="Delete" class="submitLink" title="Delete" /> 但是,submit和c

我们有一个表单,它有几个单独的提交按钮,可以执行不同的操作。问题是我有几个按钮,它们具有以下HTML:

<input type="submit" name="submit" value="Submit" class="submitLink" title="Submit" />
<input type="submit" name="submit" value="Delete" class="submitLink" title="Delete" />
但是,submit和click都在内部调用find元素,并且这两个方法都不允许添加谓词关键字,因此这样的调用也不起作用:

self.br.submit(predicate=submit_button_finder)
我还缺什么吗

更新:

添加了一个辅助函数,用于检索符合以下条件的所有元素:

def find_controls(self, name=None, type=None, kind=None, id=None, predicate=None, label=None):

  i = 0
  results = []

  try :
    while(True):
      results.append(self.browswer.find_control(name, type, kind, id, predicate, label, nr=i))
      i += 1
  except Exception as e: #Exception tossed if control not found
    pass
  return results
然后替换以下行:

submit_button = self.br.form.find_control(predicate=submit_button_finder)
self.br.submit(submit_button)
与:


一个相当贫乏的解决方法是手动迭代相关表单中的所有控件,然后根据条件从表单中删除不需要的控件。例如:

for each in form.controls[:]:
  if each not "some criteria":
    form.controls.remove(each)

这里最好的办法是将您正在迭代的控件限制为只包含SubmitControl对象。这样,您就可以将表单限制为一个提交按钮,而browser.submit()方法将无法选择要单击的内容。

我很确定,您不应该在一个页面上有两个同名按钮。这可能是你的问题的一部分。@Alex很遗憾,我无法控制它。添加了一个帮助函数,允许我们在给定位置策略的情况下提取所有元素。然后按照你的建议移除。修改原始问题以包含答案。
submit_button = self.br.form.find_control(predicate=submit_button_finder)
submit_buttons = self.find_controls(type="submit")
for button in submit_buttons[:]:
  if (button != submit_button) : self.br.form.controls.remove(button)
self.br.submit()
for each in form.controls[:]:
  if each not "some criteria":
    form.controls.remove(each)