Cómo analizar html que incluye código JavaScript

¿Cómo se analizan los documentos html que hacen un uso intensivo de javascript? Sé que hay algunas bibliotecas en Python que pueden analizar files xml / html estáticos y básicamente estoy buscando un progtwig o biblioteca (o incluso un complemento de Firefox) que lea html + javascript, ejecute el bit de javascript y emita código html sin javascript por lo que se vería idéntico si se muestra en un browser.

Como un simple ejemplo

<a href="javascript:web_link(34, true);">link</a> 

debe ser reemplazado por el valor apropiado que devuelve la function javascript, por ej.

 <a href="http://www.example.com">link</a> 

Un ejemplo más complejo sería una página html facebook salvada que está llena de cargas de código javascript.

Probablemente relacionado con Cómo "ejecutar" la página HTML + Javascript con Node.js, pero ¿realmente necesito Node.js y JSDOM? También se relaciona un poco la biblioteca de Python para renderizar HTML y javascript, pero no me interesa renderizar solo la salida html pura.

Puedes usar Selenium con python como se detalla aquí

Ejemplo:

 import xmlrpclib # Make an object to represent the XML-RPC server. server_url = "http://localhost:8080/selenium-driver/RPC2" app = xmlrpclib.ServerProxy(server_url) # Bump timeout a little higher than the default 5 seconds app.setTimeout(15) import os os.system('start run_firefox.bat') print app.open('http://localhost:8080/AUT/000000A/http/www.amazon.com/') print app.verifyTitle('Amazon.com: Welcome') print app.verifySelected('url', 'All Products') print app.select('url', 'Books') print app.verifySelected('url', 'Books') print app.verifyValue('field-keywords', '') print app.type('field-keywords', 'Python Cookbook') print app.clickAndWait('Go') print app.verifyTitle('Amazon.com: Books Search Results: Python Cookbook') print app.verifyTextPresent('Python Cookbook', '') print app.verifyTextPresent('Alex Martellibot, David Ascher', '') print app.testComplete() 

De las preguntas frecuentes de Mozilla Gecko :

P. ¿Puede invocar el motor Gecko desde un script de shell Unix? ¿Podría enviarle HTML y get una página web que podría enviarse a la impresora?

A. Realmente no es compatible; sin embargo, probablemente pueda get algo parecido a lo que desea al escribir su propia aplicación usando las API de incrustación de Gecko. Tenga en count que actualmente no es posible imprimir sin un widget en la pantalla para procesar.

Incrustar Gecko en un progtwig que produce lo que quieres puede ser demasiado pesado, pero al less tu producción será tan buena como sea posible.

PhantomJS se puede cargar usando Selenio

 $ ipython In [1]: from selenium import webdriver In [2]: browser=webdriver.PhantomJS() In [3]: browser.get('http://seleniumhq.org/') In [4]: browser.title Out[4]: u'Selenium - Web Browser Automation'