如何解析包含JavaScript代码的HTML
如何解析那些大量使用JavaScript的HTML文档呢?我知道在Python中有一些库可以解析静态的XML/HTML文件,我其实是在寻找一个程序或库(甚至是Firefox插件),它能够读取HTML和JavaScript,执行JavaScript部分,然后输出没有JavaScript的HTML代码,这样在浏览器中显示出来的效果就一模一样了。
举个简单的例子
<a href="javascript:web_link(34, true);">link</a>
应该被JavaScript函数返回的相应值替换,比如说
<a href="http://www.example.com">link</a>
一个更复杂的例子是保存的Facebook HTML页面,上面满是各种JavaScript代码。
这可能和 如何用Node.js“执行”HTML+JavaScript页面 有关,但我真的需要Node.js和JSDOM吗?还有一点相关的是 用于渲染HTML和JavaScript的Python库,不过我并不想渲染,只想要纯粹的HTML输出。
3 个回答
2
问:我可以从 Unix shell 脚本中调用 Gecko 引擎吗?我能否发送 HTML 并得到一个可以打印的网页?
答:其实不太支持;不过你可以通过使用 Gecko 的嵌入 API 自己写一个应用程序,可能能接近你想要的效果。需要注意的是,目前没有屏幕上的小部件来渲染内容的话,是无法打印的。
在一个程序中 嵌入 Gecko 以输出你想要的内容可能会显得有些复杂,但至少你的输出效果会尽可能好。
3
你可以使用Selenium这个工具来配合Python进行操作,具体的使用方法可以在这里找到。
下面是一个例子:
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()