Pregunta

Estoy tratando de escribir un Web Bot basado en Python que pueda leer e interpretar una página HTML, luego ejecutar una función onClick y recibir la nueva página HTML resultante. Ya puedo leer la página HTML y puedo determinar las funciones que debe invocar el comando onClick, pero no tengo idea de cómo ejecutar esas funciones o cómo recibir el código HTML resultante.

¿Alguna idea?

¿Fue útil?

Solución

La única herramienta en Python para Javascript que conozco es python-spidermonkey . Sin embargo, nunca lo he usado.

Con Jython podría (ab-) usar HttpUnit .

Editar : olvidé que puede usar Scrapy . Es compatible con Javascript a través de Spidermonkey, e incluso puedes usar Firefox para rastrear la web.

Editar 2 : Recientemente, me encuentro usando la automatización del navegador cada vez más para tales tareas gracias a algunas excelentes bibliotecas. QtWebKit ofrece acceso completo a un navegador WebKit, que se puede usar en Python gracias a los enlaces de idioma ( PySide o PyQt ). Parece que hay bibliotecas y enlaces similares para Gtk + que no he probado. API Selenium WebDriver también funciona muy bien y tiene una comunidad activa.

Otros consejos

Bueno, obviamente, Python no interpretará el JS por usted (aunque puede haber módulos que puedan hacerlo). Supongo que necesita convertir las instrucciones JS a transformaciones equivalentes en Python.

Supongo que ElementTree o BeautifulSoup serían buenos puntos de partida para interpretar la estructura HTML.

Para ejecutar JavaScript, debe hacer mucho de lo que hace un navegador web completo, excepto el renderizado. En particular, necesita un intérprete de JavaScript, además del intérprete de Python.

Un punto de partida podría ser python-spidermonkey . Dependiendo del JavaScript específico, es posible que deba proporcionar una buena API DOM al spidermonkey, además de proporcionar una implementación XmlHttpRequest.

Puede intentar aprovechar V8 ,

  

V8 es el motor JavaScript de código abierto y alto rendimiento de Google. Está escrito en C ++ y se usa en Google Chrome, el navegador de código abierto de Google.

Llamarlo desde Python puede no ser sencillo, sin un marco para proporcionar el DOM. Pijamas tiene un proyecto experimental, Escritorio de pijamas , que proporciona integración V8 para la ejecución de Javascript .

Pyv8 es un enlace experimental de python v8 y una pitón -compilador de JavaScript.

Para la parte del navegador de esto, es posible que desee examinar Mechanize, que básicamente es un navegador web implementado como una biblioteca Python. http://pypi.python.org/pypi/mechanize/0.1.11 Pero como se mencionó, el texto n onClick es Javascript, y necesitará spidermonkey para eso.

Si puede hacer un soporte genérico para spidermonkey en mecanizar, estoy seguro de que muchas personas estarían extremadamente felices. ;)

Mecanizar puede ser excesivo, tal vez solo desee encontrar partes específicas del HTML, y luego lxml y BeautifulSoup funcionan bien.

¿Por qué no hueles lo que se envía después del evento onclick y lo replicas con tu bot?

  

Para la automatización web, puede buscar " webbot " biblioteca. Hace que la automatización sea muy simple y sin dolor.

webbot funciona incluso para páginas web con id y nombres de clase que cambian dinámicamente y tiene más métodos y características que el selenio y la mecanización.

Aquí hay un fragmento de webbot

from webbot import Browser 
web = Browser()
web.go_to('google.com') 
web.click('Sign in')
web.type('mymail@gmail.com' , into='Email')
web.click('NEXT' , tag='span')
web.type('mypassword' , into='Password' , id='passwordFieldId') # specific selection
web.click('NEXT' , tag='span') # you are logged in ^_^

Los documentos están en: https://webbot.readthedocs.io

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top