mechanize select form using id

人走茶凉 提交于 2019-11-29 09:06:55
python412524

I found this as a solution for the same problem. br is the mechanize object:

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

I'm sure the loop counter method above could be done more pythonic, but this should select the form with attribute id="sblock".

Improving a bit on python412524's example, the documentation states that this is valid as well, and I find it a bit cleaner:

for form in br.forms():
    if form.attrs['id'] == 'sblock':
        br.form = form
        break

For any future viewers, here's another version using the predicate argument. Note that this could be made into a single line with a lambda, if you were so inclined:

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

br.select_form(predicate=is_sblock_form)

Source: https://github.com/jjlee/mechanize/blob/master/mechanize/_mechanize.py#L462

marbdq

Try using: br.select_form(nr=0), where nr is the form number (you don't need the name or id).

try with:

[f.id for f in br.forms()]

It should return a list of all form ids from your page

g_form_id = ""


def is_form_found(form1):
    return "id" in form1.attrs and form1.attrs['id'] == g_form_id


def select_form_with_id_using_br(br1, id1):
    global g_form_id
    g_form_id = id1
    try:
        br1.select_form(predicate=is_form_found)
    except mechanize.FormNotFoundError:
        print "form not found, id: " + g_form_id
        exit()


# ... goto the form page, using br = mechanize.Browser()

# now lets select a form with id "user-register-form", and print its contents
select_form_with_id_using_br(br, "user-register-form")
print br.form


# that's it, it works! upvote me if u like

You can use the predicate param of the function select_form of the Browser class. Like this:

from mechanize import Browser, FormNotFoundError

try:
   br.select_form(predicate=lambda frm: 'id' in frm.attrs and frm.attrs['id'] == 'sblock')
except FormNotFoundError:
  print("ERROR: Form not Found")   
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!