Отсутствие элементов при использовании селена Chrome драйвера для автоматического «Сохранить как PDF» - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь автоматически сохранить файл PDF, созданный с помощью pdftohtmlEX (https://github.com/coolwanglu/pdf2htmlEX), с использованием веб-драйвера selenium (chrome).

Он почти работает, за исключением подписей к рисункам, а иногда даже частицифры отсутствуют.

Сохранено вручную:

Manually saved

Автоматически сохранено с использованием веб-драйвера Selen & Chrome: Saved using selenium & chromedriver

Вот мой код (вам нужен хром-вебдрайвер (http://chromedriver.chromium.org/downloads) в той же папке, что и этот скрипт):

import json
from selenium import webdriver

# print settings: save as pdf, 'letter' formatting
appState = """{
    "recentDestinations": [
        {
            "id": "Save as PDF",
            "origin": "local"
        }
    ],
    "mediaSize": {
        "height_microns": 279400,
        "name": "NA_LETTER",
        "width_microns": 215900,
        "custom_display_name": "Letter"
    },
    "selectedDestinationId": "Save as PDF",
    "version": 2
}"""

appState = json.loads(appState)
profile = {"printing.print_preview_sticky_settings.appState": json.dumps(appState)}
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option('prefs', profile)
# Enable automatically pressing the print button in print preview
# https://peter.sh/experiments/chromium-command-line-switches/
chrome_options.add_argument('--kiosk-printing')

driver = webdriver.Chrome('./chromedriver', options=chrome_options)
driver.get('http://www.deeplearningbook.org/contents/intro.html')
driver.execute_script('window.print();')
driver.quit()

Иногдакогда я вручную печатаю, это тоже случается, но если я затем изменяю любой из параметров печати, предварительный просмотр перезагружается, и заголовки изображений снова появляются и остаются там, независимо от того, какие параметры я дополнительно включаю / отключаю.

Chrome printing settings

То, что я пробовал до сих пор:

  • различные версии веб-драйверов Chrome (71, 72, 73) с этого сайта: http://chromedriver.chromium.org/downloads
  • включить фоновую графику, добавив «isCssBackgroundEnabled»: true »в appState

1 Ответ

0 голосов
/ 07 марта 2019

Так что, повозившись, я случайно нашел решение.Я не очень понимаю, почему, но включение «Режим PrintBrowser» («Включает режим PrintBrowser, в котором все отображается так, как будто напечатано.») Решает проблему.Это может или может иметь отношение к загрузке CSS правильно.

Мне просто нужно добавить chrome_options.add_argument('--enable-print-browser'), и все элементы есть!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...