2010-10-18 14 views
6

Tengo problemas para enviar el resultado de un envío de formulario (puedo enviar un formulario, pero no puedo enviar el formulario en la página que sigue al primero).Envío de un formulario en mecanizado

tengo:

browser = mechanize.Browser() 
browser.set_handle_robots(False) 
browser.open('https://www.example.com/login') 
browser.select_form(nr=0) 

browser.form['j_username'] = 'username' 
browser.form['j_password'] = 'password' 
req = browser.submit() 

Esto funciona, como print req resultados en

`

<body onload="document.forms[0].submit()"> 
    <noscript> 
     <p> 
      <strong>Note:</strong> Since your browser does not support JavaScript, 
      you must press the Continue button once to proceed. 
     </p> 
    </noscript> 

    <form action="https://www.example.com/Shibboleth.sso/SAML2/POST" method="post"> 
     <div> 
      <input type="hidden" name="RelayState" value="cookie:95ca495c"/>     

      <input type="hidden" name="SAMLResponse" value="really long encoded value"/>     
     </div> 
     <noscript> 
      <div> 
       <input type="submit" value="Continue"/> 
      </div> 
     </noscript> 
    </form> 

</body> 

`

Pero tengo errores cuando intento utilizar req.select_form(nr=0)

Supongo que esto es probablemente algo así como la forma en que mechanize devuelve objetos desde submit() y que estoy haciendo esto de la manera incorrecta.

Cualquier entrada o guía serían apreciados :)

+1

¿no se olvidó de enviar este primer formulario para obtener el formulario de inicio de sesión? ('browser.submit()' after 'browser.select_form (nr = 0)') – mykhal

+0

No, configuro req = browser.submit(), que envía el primer formulario, ¿no? – Parker

+1

pensé que obtendría el formulario de inicio de sesión real después de enviar el primer formulario de redirección ... ¿hay otro formulario en esta página? tu pregunta me parece a mí [ésta] (http://stackoverflow.com/questions/3901218/following-the-result-of-pressing-a-submit-button-in-python-mechanize), que obviamente también es tuya :) – mykhal

Respuesta

7

intentarlo de nuevo browser.select_form(nr=0) en lugar de req.select_form(nr=0). (después de enviar o hacer clic en un enlace, la nueva respuesta se considera como una página del navegador real, como en un navegador :))

+0

Gracias, otra vez, mykhal! – Parker

+0

@Parker no hay problema, espero que funcionó esta vez – mykhal

+0

Sí, lo hizo, gracias de nuevo – Parker

Cuestiones relacionadas