【问题标题】:Missing elements when using selenium chrome driver to automatically 'Save as PDF'使用 selenium chrome 驱动程序自动“另存为 PDF”时缺少元素
【发布时间】:2019-07-23 10:45:06
【问题描述】:

我正在尝试使用 selenium (chrome) 网络驱动程序自动保存使用 pdftohtmlEX (https://github.com/coolwanglu/pdf2htmlEX) 创建的 PDF 文件。

它几乎可以工作,除了数字的标题,有时甚至部分数字都丢失了。

手动保存:

使用 selenium 和 chrome webdriver 自动保存:

这是我的代码(您需要与此脚本位于同一文件夹中的 chromium webdriver (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()

有时当我手动打印时也会发生这种情况。但是,如果我随后更改任何打印选项,则预览会重新加载,并且图像标题会再次出现并保留在那里,无论我进一步启用/禁用哪些选项。

到目前为止我尝试了什么:

【问题讨论】:

  • 如果您在“手动打印”时也看到此问题,则表示您有错误。真正的问题可能是 Selenium 非常快,它会复制您手动执行时偶尔发生的事情
  • 这是一个好点!如果我禁用“kiosk-printing”,以便除了最后单击“Save PDF”之外的所有内容都是自动化的,无论我等待多长时间或更改什么打印设置,丢失的元素永远不会出现......这与当我手动打印。因此,Chrome.app 和 chrome 驱动程序之间似乎存在差异。要么是缺少偏好,要么是错误......
  • 可能是个愚蠢的问题,但是您是否尝试过在获取后添加手动等待时间? Selenium 不需要等待所有元素正确渲染,print 应该只打印调用时渲染的内容。所有 PNG 文件似乎都是异步加载的,Selenium 可能不会等待它们被下载和渲染。
  • 是的,忘了提,也试过了...
  • 您的打印 CSS 设置有问题?

标签: python selenium-webdriver selenium-chromedriver


【解决方案1】:

所以,通过摆弄,我偶然找到了解决方案。我真的不明白为什么,但启用“PrintBrowser 模式”(“启用 PrintBrowser 模式,在这种模式下,一切都像打印一样呈现。”)解决了这个问题。这可能与 CSS 正确加载有关。

我只需要添加chrome_options.add_argument('--enable-print-browser'),所有元素都在那里!

【讨论】:

    猜你喜欢
    • 2018-05-23
    • 2022-06-22
    • 2018-08-15
    • 2020-05-15
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多