2011-12-19 8 views
14

Como parte de mi misión de mejorar en Python, ahora intento iniciar sesión en un sitio web frecuente, enviarme un mensaje privado y luego firmar fuera. Hasta ahora, he logrado iniciar sesión (usando urllib, cookiejar y urllib2). Sin embargo, no puedo encontrar la forma de completar el formulario requerido para enviarme un mensaje.Usando Python para iniciar sesión en el sitio web, rellene un formulario y luego cierre la sesión

El formulario se encuentra en /messages.php?action=send. Hay tres cosas que deben cumplimentarse para enviar el mensaje: tres campos de texto llamados nombre, título y mensaje. Además, hay un botón de envío (llamado "enviar").

¿Cómo puedo completar este formulario y enviarlo?

+0

posible duplicado de [valores para llenar formularios en una página web a través de una secuencia de comandos de Python (no probar)] (http://stackoverflow.com/questions/1555234/fill-form-values-in-a-web -page-via-a-python-script-not-testing) – ravi404

Respuesta

11
import urllib 
import urllib2 

name = "name field" 
data = { 
     "name" : name 
     } 

encoded_data = urllib.urlencode(data) 
content = urllib2.urlopen("http://www.abc.com/messages.php?action=send", 
     encoded_data) 
print content.readlines() 

basta con sustituir http://www.abc.com/messages.php?action=send con la dirección URL en su formulario se presenta

respuesta a su comentario: Si la URL es la dirección URL donde se encuentra su forma, y ​​lo que necesita hacer esto sólo por un sitio web , mirar el código fuente de la página y encontrar

<form method="POST" action="some_address.php"> 

y poner esta dirección como parámetro para urllib2.urlopen

Un Debe tener en cuenta lo que hace el botón submit. Simplemente envíe una solicitud Http a la url definida por action en el formulario. Lo que usted hace es simular esta solicitud con urllib2

+0

Whoop, lo siento. Es la página donde se encuentra el formulario. (continúa en el siguiente comentario gracias a mi tonto iPod) – Matthew

+0

(continuación) ¡Gracias! Eso parece que funcionará. Lo intentaré por la mañana. ¿Enviaré el formulario también, o tengo que poner algo en la lista de datos para "enviar"? – Matthew

+0

Respondí editando la respuesta –

7

Quiere la biblioteca mechanize. Esto le permite automatizar fácilmente el proceso de navegación de sitios web y enviar formularios/siguientes enlaces. El sitio al que me he vinculado tiene ejemplos y documentación bastante buenos.

+0

: D ¡Lo tengo instalado ahora, voy a tener un juego con él! Gracias: D – Matthew

1

Trate de resolver las solicitudes que se realizan (por ejemplo, utilizando la herramienta de desarrollador web de Chrome o con Firefox/Firebug) e imite la solicitud POST que contiene los datos del formulario deseado.

Además de la gran biblioteca de mecanizado mencionada por Andrew, en caso de que también sugiera que use BeautifulSoup para analizar el código HTML.

Si no desea utilizar mecanize pero aún desea una solución fácil y limpia para crear solicitudes HTTP, le recomiendo el módulo excellend requests.

3

Puede usar mechanize para trabajar fácilmente con esto. Esto facilitará su trabajo de enviar el formulario. No olvide consultar los parámetros como nombre, título, mensaje al ver el código fuente del formulario html.

import mechanize 
br = mechanize.Browser() 
br.open("http://mywebsite.com/messages.php?action=send") 
br.select_form(nr=0) 
br.form['name'] = 'Enter your Name' 
br.form['title'] = 'Enter your Title' 
br.form['message'] = 'Enter your message' 
req = br.submit() 
Cuestiones relacionadas