Python + Selenium + PhantomJS визуализировать PDF

Можно ли использовать рендеринг PhantomJS's для возможностей PDF, когда PhantomJS используется в сочетании с Selenium и Python? (т. е. page.render('file.pdf') mimic page.render('file.pdf') внутри Python через Selenium).

Я понимаю, что это использует GhostDriver , и GhostDriver самом деле не поддерживает много способов печати.

Если возможна другая альтернатива, а не Селен, я все уши.

4 Solutions collect form web for “Python + Selenium + PhantomJS визуализировать PDF”

Вот решение, использующее селен и специальную команду для GhostDriver (он должен работать с GhostDriver 1.1.0 и PhantomJS 1.9.6, протестирован с 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") 

см. также мой ответ на тот же вопрос здесь .

Вы можете использовать selenium.selenium.capture_screenshot('file.png') но это даст вам снимок экрана как png, а не pdf. Кажется, что нет способа получить скриншот в формате pdf.

Вот документы для capture_screenshot: http://selenium.googlecode.com/git/docs/api/py/selenium/selenium.selenium.html?highlight=screenshot#selenium.selenium.selenium.capture_screenshot

Пробовал pdfkit ? Он может отображать PDF-файлы с html-страниц.

@rejected, я знаю, что вы упомянули о том, что не хотите использовать подпроцессы, но …

Фактически вы можете использовать более сложную коммуникацию, чем ожидалось. Теоретически вы можете взять пример stdin / stdout от Ariya и расширить его, чтобы быть относительно общим сценарием оболочки. Сначала можно принять загружаемую страницу, а затем прослушать (и выполнить) ваши тестовые действия на этой странице. В конце концов, вы можете .render команду .render или даже сделать общий захват для обработки ошибок:

 try { // load page & execute stdin commands } catch (e) { page.render(page + '-error-state.pdf'); } 
  • selenium webdriver занимает слишком много времени, чтобы загрузить страницу
  • множественные тестовые примеры python selenium
  • Захват сети с помощью Selenium / PhantomJS
  • Получение вывода console.log из Chrome с привязками API Selenium Python
  • Установка тайм-аута на веб-сервере селена. PhantomJS
  • Как нажимать на текстовую кнопку, используя selenium python
  • Передача пользовательского агента через webdriver в Selenium
  • Загрузка с хромированным безголовым и селеном
  • Python - лучший язык программирования в мире.