mechanize select form using id

后端 未结 7 1698
天命终不由人
天命终不由人 2020-12-18 18:31

I am working on mechanize with python.

The

相关标签:
7条回答
  • 2020-12-18 18:34

    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")   
    
    0 讨论(0)
  • 2020-12-18 18:36

    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

    0 讨论(0)
  • 2020-12-18 18:44

    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".

    0 讨论(0)
  • 2020-12-18 18:45
    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
    
    0 讨论(0)
  • 2020-12-18 18:49

    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
    
    0 讨论(0)
  • 2020-12-18 18:50

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

    0 讨论(0)
提交回复
热议问题