Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python + Selenium + PhantomJS render to PDF

Tags:

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.

like image 729
Rejected Avatar asked Jun 04 '13 20:06

Rejected


Video Answer


2 Answers

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.

like image 80
MTuner Avatar answered Dec 04 '22 04:12

MTuner


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

like image 23
KAtkinson Avatar answered Dec 04 '22 06:12

KAtkinson