Autor
|
Tema: [Python] Enviar un dato a traves de un input HTML (Leído 15,972 veces)
|
Kasswed
|
Hola.
Necesito hacer en python lo siguiente:
Tengo un archivo HTML con diversos inputs, y necesito rellenar uno de esos inputs y darle al boton de enviar. Para todo ello necesito estar logueado, creo que ya consigo hacer el login, pero no consigo hacer lo del input.
Alguna sugerencia?
|
|
|
En línea
|
"He who allows himself to be insulted, deserves to be." Repórtame cualquier falta a las normas del foro por mensaje privado.
|
|
|
6666
Desconectado
Mensajes: 146
Wikileaks.org
|
Bueno no tengo ni idea de python pero mira: import urllib2_file import urllib2
data = {'name': 'value', 'file': open('/etc/services') } urllib2.urlopen('http://site.com/script_upload.php', data)
Ahi se envia por metodo post la info a un upload y los input serian "name" y "file" con sus respectivos valores. lo que puedes hacer es .. ver como se loguea .. crear una funcion logear() o algo asi .. y luego hacer otra funcion con lo que quieres hacer. además ese code es muy facil de entender y modificar .. un poco más de info: Python, web forms and cookies:http://therning.org/magnus/archives/270
|
|
« Última modificación: 19 Agosto 2009, 14:11 pm por l0ve »
|
En línea
|
|
|
|
Novlucker
Ninja y
Colaborador
Desconectado
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
Buenas Básicamente lo que te ha dicho l0ve debería de servir, con urlopen de urllib2 puedes hacer el envío de los datos, a esta función debes de pasarle la url base y los parámetros que siguen (los tomas del formulario) Eso si .. ten en cuenta 1 cosa ... antes del envío de los datos debes de convertir la url (parámetros) al formato correcto, para lo cual puedes hacer uso de urlencode de urllib, a esta solo debes de pasar tuplas de datos (clave/variable - valor), y te devuelve una cadena con la url "armada" camposform = urllib.urlencode({"usuario":"Kasswed","contraseña":"mipass","lang":"es"})
Continuando con el primer ejemplo que te han dejado sería como codificar dataSaludos
|
|
« Última modificación: 19 Agosto 2009, 16:03 pm por Novlucker »
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
Kasswed
|
Gracias por la ayuda pero no me ha funcionado. Un ejemplo de uso seria, por ejemplo, la web www.meneame.netLa pagina de login es: http://meneame.net/login.phpY luego el input a rellenar seria el de: http://meneame.net/sneak.phpLo estoy probando con esta web y nada. Alguna idea? Mirad mi codigo: import urllib, urllib2, cookielib, ClientForm username = 'Kasswed' password = 'm3tronch0yBerroncho' cj = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) login_data = urllib.urlencode({"username":username,"password":password}) urllib2.urlopen('http://meneame.net/login.php', login_data) mensaje = urllib.urlencode({"comment": "hallo"}) urllib2.urlopen('http://meneame.net/sneak.php', mensaje)
|
|
|
En línea
|
"He who allows himself to be insulted, deserves to be." Repórtame cualquier falta a las normas del foro por mensaje privado.
|
|
|
Novlucker
Ninja y
Colaborador
Desconectado
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
Que versión de Python tienes? yo estoy probando ahora en la 3 ... la verdad que hay muchas cosas que no he tocado luego de migrar .. y es lindo cuando ves que le han hecho tantos cambios ... sobre todo cuando la mitad de las cosas ya no funcionan, ni los import, ni las funciones (por ejemplo ya no existe urllib2) He creado un código pero es bastante diferente al tuyo y no lo puedo probar correctamente porque hasta dentro de 2 hrs no puedo comentar (me acabo de crear una cuenta a modo de prueba en meneame), además de que no estoy en mi pc y acabo de meterle python a esta donde estoy Pero eso si ..he visto algo que al menos a mi me causaba problemas en el login .. si revisas justamente el login que tienes actualmente verás que la web de menéame no devuelve nada como respuesta al ingreso de usuario y pass, ni que esta bien, ni que esta mal, simplemente recarga la web (esto lo he visto con read()). El problema en esto esta en que revisando el formulario de autentificación veo dos parametros más ... processlogin=1 y return="", así que deberías de pasarlos también import urllib, urllib2, cookielib, ClientForm username = 'Kasswed' password = 'm3tronch0yBerroncho' opener = urllib2.build_opener(urllib2.HTTPCookieProcessor()) urllib2.install_opener(opener) login_data = urllib.urlencode({"username":username,"password":password,"processlogin":"1","return":""}) opener.open('http://meneame.net/login.php', login_data) mensaje = urllib.urlencode({"comment": "hallo"}) opener.open('http://meneame.net/sneak.php', mensaje)
Así si debería de ir .. igual si te fijas verás que además de la linea de login_data le he hecho un par de cambios más; - La cookie no es necesaria referenciarla, ya que se crea sola (salvo que quieras utilizarla para otra cosa o definir tu propia cookie) y el HTTPCookieProcessor se encarga de lo demás
- Se establece el openerdirectory por defecto por medio de install_opener, para utilizar el mismo opener/cookies en respectivos request (así no se pierde la cookie)
- Se utiliza la referencia al opener y la función open, en lugar de urllib2.urlopen, ya que al igual que antes, trabajamos con la referencia y cookies almacenadas.
Obviamente prueba primero con tu code simplemente modificando los parámetros del login .. y si no sirve prueba con este segundo (el cual no esta probado por lo comentado antes) Saludos
|
|
« Última modificación: 24 Agosto 2009, 02:45 am por Novlucker »
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
Kasswed
|
Muchísimas gracias, mañana lo pruebo ya que en la máquina donde estoy no tengo python ni nada.
Editaré el post con los resultados que obtenga, de nuevo, gracias!
PD: Uso la versión 2 de python!
|
|
« Última modificación: 20 Agosto 2009, 16:08 pm por Kasswed »
|
En línea
|
"He who allows himself to be insulted, deserves to be." Repórtame cualquier falta a las normas del foro por mensaje privado.
|
|
|
Kasswed
|
Nada, no funciona Algun dia podremos... xD
|
|
|
En línea
|
"He who allows himself to be insulted, deserves to be." Repórtame cualquier falta a las normas del foro por mensaje privado.
|
|
|
|
Novlucker
Ninja y
Colaborador
Desconectado
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
XD ... pero creo que ahora esta bien y el problema lo tienes en otro lado Llegas a logarte? ... prueba modificando un poco el script aquí... respuesta = opener.open('http://meneame.net/login.php', login_data) print(respuesta.read())
Esto para verificar lo que imprime .. y si corresponde con lo que debería de salir luego de logarte, para que sea más gráfico sin que tengas que ponerte a programar algo más, puedes comentar las líneas siguientes (las que están después de las que he puesto antes) y directamente redireccionar la salida del script a un html python.exe elscript.py > print.html
Si esto funciona .. entonces el script sirve ... solo que seguimos con los problemas de los parámetros a la hora de publicar un mensaje XD De donde salió esa url sneak.php? porque no doy con ella ... y por otra parte a la hora de comentar una noticia tengo varias cosas que pasarle para poder publicarla, ej: Además como se ve si tendrás que referencias la cookie, ya que necesitas leer su contenido para obtener el user_id, además necesitas identificar el id de la noticia, etc En definitiva, que el problema puede que sea otro y no necesariamente el script, ya que en este tipo de "programas" el problema es justamente el identificar todos los campos/parámetros que hay que pasar, además de como obtener o generar estos Saludos
|
|
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
Kasswed
|
No no, lo de publicar la noticia ya es demasiado avanzado xD Yo quiero comentar aquí: http://meneame.net/sneak.phpEs como un chat. Probaré lo que dices, pero ya te digo que no hay forma. Gracias de nuevo!
|
|
|
En línea
|
"He who allows himself to be insulted, deserves to be." Repórtame cualquier falta a las normas del foro por mensaje privado.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
python castear a dato/objeto?
Scripting
|
Kase
|
2
|
6,009
|
20 Marzo 2011, 00:00 am
por lnvisible
|
|
|
Enviar un dato a MySQL
Desarrollo Web
|
Meta
|
3
|
2,930
|
27 Abril 2012, 07:29 am
por engel lex
|
|
|
llenar inputs dependiente del dato de otro input
Desarrollo Web
|
matrixre9
|
1
|
15,868
|
13 Diciembre 2013, 03:05 am
por #!drvy
|
|
|
[Resuelto] input de Python en C++?
Programación C/C++
|
Br1ant
|
7
|
4,452
|
28 Junio 2015, 19:31 pm
por Br1ant
|
|
|
(Python 3.5) 2 veces un input
Scripting
|
BigKaz
|
3
|
2,366
|
14 Diciembre 2016, 04:13 am
por engel lex
|
|