mechanize – Enviar información a formulario HTML



Versión: 2.x
Descargas: enviar_formulario.zip.

mechanize (el proyecto en SourceForge) es un módulo basado en urllib2 que permite el fácil manejo de URLs, navegación, cookies y más. Debido a los grandes cambios que sufrió el paquete estándar en relación a la navegación web, hasta el momento, se mantiene compatible únicamente con la verión 2.x de Python.

A continuación se muestra cómo hacer uso de mechanize para rellenar la información de un formulario HTML y enviar los datos del mismo.

submit.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from mechanize import Browser

print("Enviando formulario...")

# Crear navegador.
browser = Browser()

# Abrir URL.
browser.open("http://localhost:8000/index.py")

# Seleccionar el formulario.
form = browser.select_form("contact")

# Rellenar los campos.
browser["name"] = "Recursos Python"
browser["email"] = "contacto@recursospython.com"
browser["message"] = "Hola mundo"

# Enviar.
response = browser.submit()

# Imprimir respuesta.
print(response.read())
print("Enviado.")

Como se puede observar, es de sencillo uso y eficaz. Se crea una instancia de mechanize.Browser y se indica una determinada dirección de URL. A través de la función Browser.select_form se determina el nombre del formulario con el que se desea trabajar. Luego, de manera similar a un diccionaro, se indican los valores de los campos de información. Por último, se utiliza Browser.submit() para enviar los datos y se imprime la respuesta.

Los nombres de los campos y el del formulario se encuentran definidos en el código HTML, a través del atributo name. Por ejemplo:

<form name="contact" method="post" action="index_post.py">
    Nombre: <input name="name" type="text" /><br />
    Email: <input name="email" type="text" /><br />
    Mensaje: <textarea name="message"></textarea><br />
    <button type="submit">Enviar</button>
</form>

El ejemplo anterior funciona en conjunto con los siguientes scripts CGI, que imprimen el código HTML necesario para ejecutar el código. Para comprender los siguientes códigos de fuente, véase Introducción al desarrollo web vía CGI.

index.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

print("Content-Type: text/html")
print("")

print(
"""<html>
    <h3>Formulario</h3>
    <form name="contact" method="post" action="index_post.py">
        Nombre: <input name="name" type="text" /><br />
        Email: <input name="email" type="text" /><br />
        Mensaje: <textarea name="message"></textarea><br />
        <button type="submit">Enviar</button>
    </form>
</html>"""
)

index_post.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from cgi import FieldStorage


print("Content-Type: text/plain")
print("")

form = FieldStorage()

name, email, message = (form["name"].value, form["email"].value,
                        form["message"].value)

print("""Formulario enviado.
Nombre: %s.
Email: %s.
Mensaje: %s.
""" % (name, email, message)
)

server.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from BaseHTTPServer import HTTPServer
from CGIHTTPServer import CGIHTTPRequestHandler


class Handler(CGIHTTPRequestHandler):
    cgi_directories = ["/"]


httpd = HTTPServer(("", 8000), Handler)
httpd.serve_forever()

El archivo index.py imprime el código HTML que contiene el formulario en cuestión. index_post.py recibe los datos enviados y los imprime como texto plano. server.py es el servidor CGI quien se encarga de procesar las peticiones.



Deja un comentario