examples javascript python browser mechanize

javascript - mechanize examples



Mecanizar y Javascript (5)

Básicamente, si quieres algo que tenga que ver con javascript, entonces necesitas un motor de JavaScript real, estos invariablemente implican la automatización de un navegador real (incluyo los sin cabeza en esto).

La HtmlUnit de Java no hace un buen trabajo ya que no usa un motor de JavaScript desde un navegador real. Phantom JS suena ideal (como señala newz2000). Sin embargo, creo que al manipular páginas con javascript puede ser muy difícil depurar el script si no puede ver la página con la que está tratando.

Esto lleva a soluciones como Selenium Webdriver que tiene una API completa de Python para automatizar varios navegadores, sin embargo, debe ejecutar un java jar y realmente lanza el navegador, entonces no es la solución de python pura que está buscando (pero creo que esto es como cerca como puedas)

Quiero usar Mechanize para simular la navegación a una página web con JavaScript activo, incluidos DOM Events y AJAX, y hasta ahora no he encontrado manera de hacerlo.

Miré algunos navegadores de cliente Python que admiten JavaScript como Spynner y Zope, y ninguno de ellos realmente funciona para mí. Spynner bloquea PyQt todo el tiempo, y Zope no admite JavaScript como parece.

¿Hay alguna manera de simular la navegación con Python solamente (sin procesos adicionales) como WATIR o bibliotecas que manipulan Firefox o Internet Explorer mientras se soporta Javascript completamente como si realmente se navegara por la página?


De http://wwwsearch.sourceforge.net/mechanize/faq.html#general

Si te encuentras con esto en una página que deseas automatizar, tienes cuatro opciones. Aquí están, aproximadamente en orden de simplicidad.

Averigüe qué está haciendo JavaScript y emúlelo en su código de Python: por ejemplo, agregando cookies manualmente a su instancia de CookieJar, llamando a métodos en HTMLForms, llamando a urlopen, etc. Consulte los formularios anteriores.

Utilice la HtmlUnit o la HttpUnit de Java desde Jython, ya que saben algo de JavaScript.

En lugar de usar mecanizar, automatice un navegador en su lugar. Por ejemplo, use MS Internet Explorer a través de sus interfaces de automatización COM, utilizando las extensiones de Python para Windows, también conocidas como pywin32, aka win32all (por ejemplo, función simple, pamie, capítulo pywin32 del libro O''Reilly) o ctypes (ejemplo). Este tipo de cosas también pueden ser útiles en Windows para los casos en que falte la API de automatización. Para Firefox, hay PyXPCOM.

Sea ambicioso y delegue automáticamente el trabajo a un intérprete apropiado (intérprete de JavaScript de Mozilla, por ejemplo). Esto es lo que hacen HtmlUnit y httpunit. Hace algunos años hice un aumento en esta línea, pero creo que todavía sería mucho trabajo hacerlo bien.


He jugado con esta nueva alternativa a Mechanize (que me encanta) llamada Phantom JS .

Es un explorador de kit web completo como Safari o Chrome, pero no tiene cabecera ni secuencias de comandos. Lo script con javascript, no python (por lo que sé al menos).

Hay algunos scripts de ejemplo para que comiences. Es muy parecido a usar Firebug. Solo he gastado unos minutos en usarlo, pero descubrí que era bastante productivo desde el principio.


Puedes usar Selenium con Python. A continuación, puede raspar el contenido generado por JavaScript, así como manipular la página con JavaScript adicional (además de Python).

# In your virtualenv: pip install selenium from selenium import webdriver # Launch Firefox GUI browser = webdriver.Firefox() # Alternatively, you can drive PhantomJS without a GUI # With Node.js installed: `npm install -g phantomjs` # browser = webdriver.PhantomJS() # Fetch a webpage browser.get(''http://example.com'') # If you need the whole HTML document # just like inspecting the rendered page with the console html = browser.page_source # Get an element, even if it was created with JS button = browser.find_element_by_css_selector(''div.some-class > / input.the-submit-button'') # Click on something button.click() # Execute some JavaScript (assumes jQuery is loaded on the page) browser.execute_script("$(''html, body'').animate({ scrollTop: 500 }, 50);")

Puede ejecutar el código en un REPL de Python y usar la función de autocompletar para descubrir los métodos disponibles en el browser o cualquier elemento que haya seleccionado. O haga algo como print(dir(browser)) para ver lo que está disponible.


Un ejemplo de cómo usar PyV8, para ejecutar JS en un DOM con python se puede encontrar aquí:

https://github.com/buffer/thug

Esto debería ser bastante fácil de hacer funcionar junto con mecanizar.