2014-04-17 91 views
8

我正在尋找能力通過GhostDriver提供pdf與PhantomJS,而不僅僅是渲染pdf。當我使用的下一個代碼,則頁通常被加載:如何通過GhostDriver(selenium)與PhantomJS運行網頁代碼

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.jspage.render('file.pdf')),但通過webdriverwebdriverexecute_script方法,但它看起來像PhantomJS代碼評估並且無權訪問webpage實例上下文。另外webdriverget_screenshot_as_base64方法,但它只返回png。

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

所以我的問題我可以通過GhostDriver訪問PhantomJS網頁實例並評估render方法?

+0

我正在尋找這個,也......任何人? – j040p3d20

+0

僅用於PDF生成(不是'GhostDriver'或'WebDriver'),你可以使用'ghost.py'(需要QT),用'pyexecjs'或'subprocesses'找到包裝。還有一些python包作爲'pdfkit'和'wkhtmltopdf'作爲'wkhtmltopdf'的包裝 - 它應該具有相同的結果,因爲還有webkit。 'weasyprint'也很好,但不是webkit。 – tbicr

回答

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 PhantomJS renders web page as images有沒有可選擇的文本,由於OS X(Qt的渲染引擎的侷限性至少有PhantomJS v.1.9.8及更早版本)。

+0

對於非python實現?有沒有辦法在Java或Python以外的任何其他實現中做到這一點? – Tibbers

相關問題