Python mechanize - two buttons of type 'submit'

前端 未结 4 1462
刺人心
刺人心 2021-02-02 09:42

I have a mechanize script written in python that fills out a web form and is supposed to click on the \'create\' button. But there\'s a problem, the form has two buttons. One fo

4条回答
  •  遥遥无期
    2021-02-02 10:16

    I tried using the nr parameter, without any luck.

    I was able to get it to work with a combination of the name and label parameters, where "label" seems to correspond to the "value" in the HTML:

    Here are my two submit buttons:

    
    
    

    ... and here's the code that clicks the first one, goes back, and then clicks the second:

    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')
    

    There's a variant that also worked for me, where the "name" of the submit button is the same, such as:

    
    
    
    

    and

    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')
    

    IMPORTANT NOTE - I was only able to get any of this multiple-submit-button code to work after cleaning up some HTML in the rest of the page.

    Specifically, I could not have
    - instead I had to have
    ... and, making even less sense, I could not have anything between the two submit buttons.

    It frustrated me to no end that the mechanize/ClientForm bug I hunted for over two hours boiled down to this:


     

    (all on one line) did not work, but


    worked fine (on multiple lines, which also shouldn't have mattered).

    I like mechanize because it was easy to install (just copy the files into my include directory) and because it's pretty simple to use, but unless I'm missing something major, I think that bugs like this are kind of awful - I can't think of a good reason at all why the first example there should fail and the second should work.

    And, incidentally, I also found another mechanize bug where a