我正在寻找通过GhostDriver
用PhantomJS
渲染pdf的能力,而不仅仅是渲染pdf。当我使用下一个代码,然后页面正常加载:
from selenium import webdriver
driver = webdriver.PhantomJS('./node_modules/phantomjs/bin/phantomjs')
driver.set_window_size(1024, 768)
driver.get('http://stackoverflow.com')
当我通过命令行使用下一个脚本时https://github.com/ariya/phantomjs/blob/master/examples/rasterize.js然后pdf完美生成。
现在我想执行类似rasterize.js
(page.render('file.pdf')
)的脚本,但要通过webdriver
。webdriver
有execute_script
方法,但它看起来像PhantomJS
代码评估,并且不能访问webpage
实例上下文。webdriver
也有get_screenshot_as_base64
方法,但它只返回png。
我使用最新版本的selenium
、phantomjs
、nodejs
。
那么我的问题是,如何通过GhostDriver
访问PhantomJS
网页实例并评估render
方法?
有一种特殊的方法可以从GhostDriver执行PhantomJS脚本,使用下一个命令:
POST /session/id/phantom/execute
它包含在GhostDriver v1.0中,因此它应该从PhantomJS v.1.9.6开始工作。
看看这个例子:
def execute(script, args):
driver.execute('executePhantomScript', {'script': script, 'args' : args })
driver = webdriver.PhantomJS('phantomjs')
# hack while the python interface lags
driver.command_executor._commands['executePhantomScript'] = ('POST', '/session/$sessionId/phantom/execute')
driver.get('http://stackoverflow.com')
# set page format
# inside the execution script, webpage is "this"
pageFormat = '''this.paperSize = {format: "A4", orientation: "portrait" };'''
execute(pageFormat, [])
# render current page
render = '''this.render("test.pdf")'''
execute(render, [])
请注意,在OS X中,由于OS X中Qt渲染引擎的限制(至少在PhantomJS v.1.9.8及更早版本中),PhantomJS将网页渲染为不可选择文本的图像。