2014-04-17 7 views
8

Sto cercando il rendering dell'abilità pdf con PhantomJS tramite GhostDriver, non solo il rendering pdf. Quando uso codice successivo, quindi la pagina normalmente caricata:Come eseguire il codice pagina web con PhantomJS tramite GhostDriver (selenio)

from selenium import webdriver 

driver = webdriver.PhantomJS('./node_modules/phantomjs/bin/phantomjs') 
driver.set_window_size(1024, 768) 
driver.get('http://stackoverflow.com') 

quando uso script successivo tramite linea di comando https://github.com/ariya/phantomjs/blob/master/examples/rasterize.js poi pdf generato perfettamente.

Ora voglio script di esecuzione come rasterize.js (page.render('file.pdf')) ma tramite webdriver. webdriver ha il metodo execute_script ma sembra una valutazione del codice PhantomJS e non ha accesso al contesto dell'istanza webpage. Anche webdriver ha il metodo get_screenshot_as_base64, ma restituisce solo png.

Uso le ultime versioni di selenium, phantomjs, nodejs.

Quindi la mia domanda su come ottenere l'accesso all'istanza della pagina Web PhantomJS tramite GhostDriver e valutare il metodo render?

+0

Sto cercando questo, anche ... qualcuno? – j040p3d20

+0

Solo per la generazione di PDF (non 'GhostDriver' o' WebDriver') puoi usare 'ghost.py' (hai bisogno di QT), trovati i wrapper con' pyexecjs' o 'subprocesses'. Esiste anche pacchetti python come 'pdfkit' e' wkhtmltopdf' come wrapper per 'wkhtmltopdf' - dovrebbe avere gli stessi risultati anche per il webkit. 'weasyprint' anche buono ma non webkit. – tbicr

risposta

9

C'è un modo speciale per eseguire lo script PhantomJS da GhostDriver, utilizzando il comando seguente:

POST /session/id/phantom/execute 

'stato incluso nel GhostDriver v1.1.0, così dovrebbe funzionare dal PhantomJS v.1.9.6.

Guardate questo esempio:

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, []) 

Si noti che in OS X PhantomJS renders web page as images con testo non selezionabile, a causa di limitazioni di Qt motore di rendering in OS X (almeno con PhantomJS v.1.9.8 e precedenti).

+0

E per implementazioni non Python? C'è un modo per farlo in Java o in qualsiasi altra implementazione diversa da Python? – Tibbers

Problemi correlati