8

我正在寻找PhantomJS通过 via渲染 pdf 的能力GhostDriver,而不仅仅是渲染 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. webdriverexecute_script方法,但它看起来像PhantomJS代码评估并且无权访问webpage实例上下文。也webdriverget_screenshot_as_base64方法,但它只返回 png。

我使用最新版本的selenium, phantomjs, nodejs.

所以我的问题是如何通过和评估方法访问PhantomJS网页实例?GhostDriverrender

4

1 回答 1

9

有一种特殊的方法可以从 GhostDriver 执行 PhantomJS 脚本,使用下面的命令:

POST /session/id/phantom/execute

它包含在GhostDriver v1.1.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 中 Qt 渲染引擎的限制(至少在 PhantomJS v.1.9.8 和更早版本中) ,在 OS X 中 PhantomJS将网页渲染为带有不可选择文本的图像。

于 2015-02-01T23:15:19.473 回答