Cómo ejecutar código de página web con PhantomJS a través de GhostDriver (selenium)

Estoy buscando la capacidad de renderizar PDF con PhantomJS través de GhostDriver , no solo de PDF Cuando uso el siguiente código, la página normalmente se carga:

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

Cuando utilizo la siguiente secuencia de comandos a través de la línea de comandos https://github.com/ariya/phantomjs/blob/master/examples/rasterize.js , el pdf se genera perfectamente.

Ahora quiero ejecutar el script como rasterize.js ( page.render('file.pdf') ) pero a través de webdriver . webdriver tiene el método execute_script pero se parece a la evaluación del código PhantomJS y no tiene acceso al contexto de la instancia de la webpage . También webdriver tiene el método get_screenshot_as_base64 , pero solo devuelve png.

Yo uso las últimas versiones de selenium , phantomjs , nodejs .

Entonces, ¿mi pregunta de cómo puedo acceder a la instancia de la página web de GhostDriver través de GhostDriver y evaluar el método de render ?

Hay una forma especial de ejecutar el script PhantomJS desde GhostDriver, usando el siguiente comando:

 POST /session/id/phantom/execute 

Se incluyó en GhostDriver v1.1.0 , por lo que debería funcionar desde PhantomJS v.1.9.6 .

Mira este ejemplo:

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

Tenga en cuenta que en OS X, PhantomJS procesa la página web como imágenes con texto no seleccionable, debido a las limitaciones del motor de representación Qt en OS X (al menos con PhantomJS v.1.9.8 y anteriores).