tutorial recibir formulario enviar datos con python forms login mechanize

formulario - recibir datos post python



EnvĂ­o de formularios con Mechanize(Python) (2)

Bien, 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 <HiddenControl(search=1) (readonly)> ... <POST http://example.com/login.php application/x-www-form-urlencoded <TextControl(username=)> <PasswordControl(password=)> <CheckboxControl(stay=[1])> <SubmitControl(<None>=Log in) (readonly)>>

He intentado 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()

Luego me di cuenta de que los formularios que intentaba completar no eran los primeros en la página, pero cambiar el 0 no ayudaba con 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, obtengo este error:

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

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


Puede tener varios problemas

  • si el formulario se genera a través de javascript, no puede resolverlo con mecanize, al menos no de manera directa; en este caso, le recomiendo que pruebe y use selenium ; puede intentar consultar la fuente HTML de la página, si no tiene el formulario allí en html puro, está bastante claro que está insertado en DOM por javascript. Además, si el formulario se envía a través de javascript, mecanizar no te ayudará

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


para seleccionar un formulario usando su nombre, debe usar:

br.select_form(name="order")

lo que estás haciendo aquí:

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

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