Envío de formularios con mecanizar (Python)

Bueno, estoy intentando iniciar sesión en un sitio usando Python y mecanizar.

Tengo el sitio abierto:

site = br.open("http://example.com/login.php") 

Y tengo una lista de los formularios (con br.forms).

 <GET http://example.com/search.php application/x-www-form-urlencoded  ... <POST http://example.com/login.php application/x-www-form-urlencoded    <SubmitControl(=Log in) (readonly)>> 

He estado tratando de enviar los campos de nombre de usuario y contraseña.

Intenté hacerlo así:

 br.select_form(nr=0) br.form["username"] = 'usernamehere' br.form["password"] = 'passwordhere' br.submit() 

Entonces me di cuenta de que los formularios que intentaba rellenar no eran los primeros en la página, pero cambiar el 0 no ayudaba en nada. ¿Qué debo hacer para seleccionar el formulario en una página como esta?

¡Sin embargo! Ese no es el único problema.

Cuando lo ejecuto, me sale este error:

 Traceback (most recent call last): File "C:\Python26\login.py", line 34, in  br.form["username"] = 'usernamehere' ... ControlNotFoundError: no control matching name 'username' 

¿Cómo puedo arreglar esto? D: ¿O lo estoy haciendo totalmente mal? Si es lo último, ¿cómo lo haría?

para seleccionar un formulario usando su nombre debe usar:

 br.select_form(name="order") 

que estas haciendo aqui

 br.form["username"] = 'usernamehere' 

está tratando de establecer un valor en un control debajo del formulario seleccionado, por lo que cuando no puede encontrarlo, arroja la excepción que está viendo.

Puede tener varios problemas

  • si el formulario se genera a través de javascript, no puede resolverlo con mecanizar (al menos no de manera directa). En este caso, le recomiendo que pruebe y use selenium . Puede intentar ver la fuente HTML de la página, si no tiene el formulario allí en HTML puro, es bastante claro que JavaScript lo inserta en DOM. Además, si el formulario se envía a través de javascript, mecanizar no le ayudará

  • Además, es posible que el formulario no esté en la primera página; es posible que desee configurar Mecanizar para que siga los redireccionamientos.