the - ¿Cómo automatizar la navegación usando python?
selenium python (16)
Creo que la mejor solución es la combinación de requests y BeautifulSoup , solo quería actualizar la pregunta para que pueda mantenerse actualizada.
Supongamos que necesito realizar un conjunto de procedimientos en un sitio web en particular, por ejemplo, rellenar algunos formularios, hacer clic en el botón enviar, enviar los datos al servidor, recibir la respuesta, nuevamente hacer algo en función de la respuesta y enviar los datos al servidor. del sitio web. Sé que hay un módulo de navegador web en python, pero quiero hacer esto sin invocar ningún navegador web. Tiene que ser un script puro.
¿Hay algún módulo disponible en python, que pueda ayudarme a hacer eso?
Gracias
Es probable que desee urllib2 . Puede manejar cosas como HTTPS, cookies y autenticación. Probablemente también querrá que BeautifulSoup ayude a analizar las páginas HTML.
HTMLUNIT es el paquete si eres un desarrollador de Java. http://htmlunit.sourceforge.net/apidocs/index.html
Hay un montón de módulos de Python integrados que podrían ayudar con esto. Por ejemplo urllib y htmllib .
El problema será más simple si cambias la forma en que lo estás abordando. Usted dice que quiere "llenar algunos formularios, hacer clic en el botón enviar, enviar los datos al servidor, recibir la respuesta", lo que parece un proceso de cuatro etapas.
De hecho, lo que debe hacer es publicar algunos datos en un servidor web y obtener una respuesta.
Esto es tan simple como:
>>> 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 haga con la respuesta dependerá de qué tan complejo sea el HTML y qué quiere hacer con él. Puede salirse con el análisis utilizando una expresión regular o dos, o puede usar la clase htmllib.HTMLParser, o tal vez un analizador de nivel superior más flexible como BeautifulSoup .
He encontrado que el complemento iMacros Firefox (que es gratuito) funciona muy bien.
Se puede automatizar con Python utilizando interfaces de objetos COM de Windows. Aquí hay un código de ejemplo de http://wiki.imacros.net/Python . Requiere Python Windows Extensions :
import win32com.client
def Hello():
w=win32com.client.Dispatch("imacros")
w.iimInit("", 1)
w.iimPlay("Demo//FillForm")
if __name__==''__main__'':
Hello()
Internet Explorer específico, pero bastante bueno:
La ventaja en comparación con urllib / BeautifulSoup es que ejecuta Javascript también, ya que usa IE.
La mejor solución que he encontrado (y que actualmente estoy implementando) es: - scripts en python que utilizan Selenium webdriver - PhantomJS sin explorador (si se usa Firefox, tendrá una GUI y será más lento)
No olvide zope.testbrowser que es un envoltorio alrededor de mechanize .
zope.testbrowser proporciona un navegador web programable fácil de usar con un enfoque especial en las pruebas.
Para la automatización definitivamente querrás echar un vistazo
webbot
Se basa en selenio y ofrece muchas más funciones con muy poco código, como buscar automáticamente elementos para realizar acciones como hacer clic, escribir según sus parámetros.
Incluso funciona para sitios con nombres de clase e identificaciones dinámicamente cambiantes.
Aquí está el documento: https://webbot.readthedocs.io/
Puede ver estas diapositivas del último pycon italiano (pdf): el autor enumeró la mayor parte de la biblioteca para realizar raspado y navegación autotécnica en python. así que puedes echarle un vistazo.
Me gusta mucho la twill (que ya ha sido sugerida), que ha sido desarrollada por uno de los autores de nose y está dirigida específicamente a sitios web de prueba.
Selenio hará exactamente lo que quieres y maneja javascript
Selenium 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 se convierte en programa.
También puedes echar un vistazo a mechanize . Su intención es manejar la "navegación web programática con estado" (según su sitio).
Todas las respuestas son antiguas, las recomiendo y soy un gran fan de las requests
Desde la página de inicio:
El módulo urllib2 estándar de Python proporciona la mayoría de las capacidades HTTP que necesita, pero la API está completamente dañada. Fue construido para un tiempo diferente - y una web diferente. Requiere una enorme cantidad de trabajo (incluso anulaciones de métodos) para realizar las tareas más simples.
Las cosas no deberían ser así. No en Python.
httplib2 + beautifulsoup
Use firefox + firebug + httpreplay para ver qué pasa el javascript hacia y desde el navegador desde el sitio web. Usando httplib2 puedes hacer lo mismo a través de la publicación y obtener
Selenium2 incluye webdriver, que tiene enlaces de Python y le permite a uno usar el controlador htmlUnit sin cabeza, o cambiar a Firefox o Chrome para la depuración gráfica.