使用id机械化选择表单

sam*_*sam 22 python forms mechanize

我正在使用python进行机械化.

<form action="/monthly-reports"  accept-charset="UTF-8" method="post" id="sblock">
Run Code Online (Sandbox Code Playgroud)

这里的表格没有名称.如何使用它来解析表单id

小智 21

我发现这是解决同样问题的方法.br是机械化对象:

formcount=0
for frm in br.forms():  
  if str(frm.attrs["id"])=="sblock":
    break
  formcount=formcount+1
br.select_form(nr=formcount)
Run Code Online (Sandbox Code Playgroud)

我确定上面的循环计数器方法可以做得更加pythonic,但是这应该选择带有属性的表单id="sblock".


Dan*_*Dan 15

在python412524的例子中改进一点,文档说明这也是有效的,我觉得它更清洁一点:

for form in br.forms():
    if form.attrs['id'] == 'sblock':
        br.form = form
        break
Run Code Online (Sandbox Code Playgroud)

  • 有些表格没有id.在if语句中使用`form.attrs.get('id')`可以避免KeyError. (5认同)

Mos*_*she 7

对于任何未来的观众,这是使用该predicate参数的另一个版本.请注意,如果您愿意,可以将其与lambda组成一行:

def is_sblock_form(form):
    return "id" in form.attrs and form.attrs['id'] == "sblock"

br.select_form(predicate=is_sblock_form)
Run Code Online (Sandbox Code Playgroud)

资料来源:https://github.com/jjlee/mechanize/blob/master/mechanize/_mechanize.py#L462


Tud*_*tin 1

尝试:

[f.id for f in br.forms()]
Run Code Online (Sandbox Code Playgroud)

它应该返回页面中所有表单 ID 的列表