Python + Selenium + PhantomJS render to PDF Python + Selenium + PhantomJS render to PDF selenium selenium

Python + Selenium + PhantomJS render to PDF


Here is a solution using selenium and special command for GhostDriver(it should work since GhostDriver 1.1.0 and PhantomJS 1.9.6, tested with PhantomJS 1.9.8):

#!/usr/bin/env python# -*- coding: utf-8 -*-"""Download a webpage as a PDF."""from selenium import webdriverdef 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://stackoverflow.com')    download(driver, "save_me.pdf")

see also my answer to the same question here.


You could use selenium.selenium.capture_screenshot('file.png') but that will give you a screen shot as a png not a pdf. There does not seem to be a way to get a screenshot as a pdf.

Here are the docs for capture_screenshot: http://selenium.googlecode.com/git/docs/api/py/selenium/selenium.selenium.html?highlight=screenshot#selenium.selenium.selenium.capture_screenshot


Tried pdfkit? It can render PDF files from html pages.