macosx python selenium phantomjs

python - phantomjs 2.1 1 macosx zip



Python+Selenium+PhantomJS render en PDF (4)

¿Probado pdfkit ? Puede renderizar archivos PDF desde páginas html.

¿Es posible usar PhantomJS''s renderizado PhantomJS''s a las capacidades de PDF cuando PhantomJS se usa en combinación con Selenium y Python? (es decir, imite el page.render(''file.pdf'') dentro de Python a través de Selenium).

Me doy cuenta de que esto utiliza GhostDriver , y GhostDriver realmente no admite mucho en la forma de imprimir.

Si es posible otra alternativa que no sea el selenio, soy todo oídos.


Aquí hay una solución que utiliza selenio y un comando especial para GhostDriver (debería funcionar desde GhostDriver 1.1.0 y PhantomJS 1.9.6, probado con PhantomJS 1.9.8):

#!/usr/bin/env python # -*- coding: utf-8 -*- """Download a webpage as a PDF.""" from selenium import webdriver def download(driver, target_path): """Download the currently displayed page to target_path.""" def execute(script, args): driver.execute(''executePhantomScript'', {''script'': script, ''args'': args}) # hack while the python interface lags driver.command_executor._commands[''executePhantomScript''] = (''POST'', ''/session/$sessionId/phantom/execute'') # set page format # inside the execution script, webpage is "this" page_format = ''this.paperSize = {format: "A4", orientation: "portrait" };'' execute(page_format, []) # render current page render = ''''''this.render("{}")''''''.format(target_path) execute(render, []) if __name__ == ''__main__'': driver = webdriver.PhantomJS(''phantomjs'') driver.get(''http://.com'') download(driver, "save_me.pdf")

Véase también mi respuesta a la misma pregunta here .



Rechazado, sé que mencionaste que no querías usar subprocesos, pero ...

Es posible que realmente pueda aprovechar la comunicación de subproceso más de lo que anticipó. Teóricamente, podría tomar el ejemplo estándar / estándar de Ariya y extenderlo para que sea un script de envoltorio relativamente genérico. Es posible que primero acepte una página para cargar, luego escuche (y ejecute) sus acciones de prueba en esa página. Eventualmente, puede iniciar el .render o incluso hacer una captura genérica para el manejo de errores:

try { // load page & execute stdin commands } catch (e) { page.render(page + ''-error-state.pdf''); }