Cómo automatizar la navegación usando python?


Supongamos que necesito realizar un conjunto de procedimientos en un sitio web en particular por ejemplo, rellene algunos formularios, haga clic en el botón enviar, envíe los datos al servidor, reciba la respuesta, nuevamente haga algo basado en la respuesta y envíe los datos al servidor del sitio web. Sé que hay un módulo webbrowser en python, pero quiero hacer esto sin invocar ningún navegador web. Tiene que ser un guión puro.

¿Hay algún módulo disponible en python que pueda ayudarme a hacer eso?
gracias

Author: Milen A. Radev, 2009-08-18

16 answers

También puedes echar un vistazo a mechanize. Su intención es manejar "navegación web programática con estado" (según su sitio).

 15
Author: arcanum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-18 09:43:36

Selenium hará exactamente lo que quieras y maneja javascript

 17
Author: adaptive,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-15 10:19:57

Todas las respuestas son viejas, lo recomiendo y soy un gran fan de solicitudes

Desde la página de inicio:

El módulo urllib2 estándar de Python proporciona la mayor parte del HTTP capacidades que necesita, pero la API está completamente rota. Fue construido para un tiempo diferente-y una web diferente. Se requiere una enorme cantidad de trabajo (incluso el método anula) para realizar el más simple de tarea.

Las cosas no deberían ser así. No en Python.

 8
Author: Foo Bar User,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-04 10:03:45

Creo que la mejor solución es la mezcla de solicitudesy BeautifulSoup, solo quería actualizar la pregunta para que pueda mantenerse actualizada.

 7
Author: Leonardo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-06 20:53:39

Selenio http://www.seleniumhq.org/ es la mejor solución para mí. puede codificarlo con python, java o cualquier lenguaje de programación que desee con facilidad. y fácil simulación que convertir en programa.

 3
Author: Yuda Prawira,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-27 14:36:59

Hay muchos módulos integrados en python que podrían ayudar con esto. Por ejemplo urllib y htmllib.

El problema será más simple si cambia la forma en que lo está abordando. Dices que quieres "llenar algunos formularios, hacer clic en el botón enviar, enviar los datos al servidor, recibir la respuesta", lo que suena como un proceso de cuatro etapas.

De hecho, lo que necesita hacer es publicar algunos datos en un servidor web y obtener una respuesta.

Esto es tan simple as:

>>> import urllib
>>> params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
>>> f = urllib.urlopen("http://www.musi-cal.com/cgi-bin/query", params)
>>> print f.read()

(ejemplo tomado de los documentos de urllib).

Lo que hagas con la respuesta depende de lo complejo que sea el HTML y de lo que quieras hacer con él. Usted podría salirse con la suya con el análisis utilizando una expresión regular o dos, o puede utilizar el htmllib.HTMLParser class, o tal vez un parser más flexible de nivel superior como Beautiful Soup.

 2
Author: roomaroo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-18 09:38:11

Selenium2 incluye webdriver, que tiene enlaces python y permite usar el controlador HtmlUnit sin cabeza, o cambiar a firefox o chrome para la depuración gráfica.

 2
Author: Nathan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-09 15:14:40

No olvides zope.testbrowser que es wrapper alrededor de mecanizar.

Zope.testbrowser proporciona un navegador web programable fácil de usar con un enfoque especial en las pruebas.
 2
Author: JamesThomasMoon1979,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-15 06:46:06

La mejor solución que he encontrado (y que actualmente estoy implementando) es : - scripts en python usando selenium webdriver - PhantomJS navegador sin cabeza (si se utiliza Firefox tendrá una interfaz gráfica de usuario y será más lento)

 1
Author: Kostas Demiris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-19 10:48:59

HTMLUNIT es el paquete si eres un desarrollador java. http://htmlunit.sourceforge.net/apidocs/index.html

 1
Author: Guru,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-10 09:43:08

He encontrado que el complemento iMacros Firefox (que es gratuito) funciona muy bien.

Se puede automatizar con Python usando interfaces de objetos COM de Windows. He aquí un ejemplo de código de http://wiki.imacros.net/Python . Requiere Extensiones de Python para Windows :

import win32com.client
def Hello():
    w=win32com.client.Dispatch("imacros")
    w.iimInit("", 1)
    w.iimPlay("Demo\\FillForm")
if __name__=='__main__':
    Hello()
 1
Author: twasbrillig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-10 20:03:57

Es probable que desee urllib2. Puede manejar cosas como HTTPS, cookies y autenticación. Probablemente también querrá BeautifulSoup para ayudar a analizar las páginas HTML.

 0
Author: Steven Huwig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-18 09:31:19

Puede echar un vistazo a estas diapositivas del último pycon italiano (pdf): El autor listó la mayor parte de la biblioteca para hacer scraping y navegación autoteada en python. así que puedes echarle un vistazo.

Me gusta mucho twill (que ya se ha sugerido), que ha sido desarrollado por uno de los autores de nose y está específicamente dirigido a probar sitios web.

 0
Author: dalloliogm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-18 09:44:37

Internet Explorer específico, pero bastante bueno:

Http://pamie.sourceforge.net/

La ventaja en comparación con urllib/BeautifulSoup es que también ejecuta Javascript ya que usa IE.

 0
Author: fraca7,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-18 10:36:51

Httplib2 + beautifulsoup

Utilice firefox + firebug + httpreplay para ver lo que el javascript pasa hacia y desde el navegador desde el sitio web. Usando httplib2 puedes esencialmente hacer lo mismo vía post y get

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-21 14:45:39

Para la automatización que sin duda podría querer comprobar hacia fuera

Webbot

Se basa en selenium y ofrece muchas más características con muy poco código como encontrar automáticamente elementos para realizar acciones como clic, tipo basado en los parámetros.

Incluso funciona para sitios con nombres de clases e identificadores que cambian dinámicamente .

Aquí está doc: https://webbot.readthedocs.io /

 0
Author: Natesh bhat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-30 07:21:46