Python + Selenium + PhantomJS render to PDF

0
0

Is it possible to use PhantomJS's rendering to PDF capabilities when PhantomJS is being used in combination with Selenium and Python? (ie. mimic page.render('file.pdf') behaviour inside Python via Selenium).

I realize that this uses GhostDriver, and GhostDriver doesn’t really support much in the way of printing.

If another alternative is possible that isn’t Selenium, I’m all ears.

  • You must to post comments
0
0

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 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://stackoverflow.com')
download
(driver, "save_me.pdf")

see also my answer to the same question here.

  • You must to post comments
Showing 1 result
Your Answer
Post as a guest by filling out the fields below or if you already have an account.
Name*
E-mail*
Website