【发布时间】: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()
有时当我手动打印时也会发生这种情况。但是,如果我随后更改任何打印选项,则预览会重新加载,并且图像标题会再次出现并保留在那里,无论我进一步启用/禁用哪些选项。
到目前为止我尝试了什么:
- 来自该站点的不同 Chrome webdriver 版本(71、72、73):http://chromedriver.chromium.org/downloads
- 通过向 appState 添加 '"isCssBackgroundEnabled": true' 来启用背景图形
【问题讨论】:
-
如果您在“手动打印”时也看到此问题,则表示您有错误。真正的问题可能是 Selenium 非常快,它会复制您手动执行时偶尔发生的事情
-
这是一个好点!如果我禁用“kiosk-printing”,以便除了最后单击“Save PDF”之外的所有内容都是自动化的,无论我等待多长时间或更改什么打印设置,丢失的元素永远不会出现......这与当我手动打印。因此,Chrome.app 和 chrome 驱动程序之间似乎存在差异。要么是缺少偏好,要么是错误......
-
可能是个愚蠢的问题,但是您是否尝试过在获取后添加手动等待时间? Selenium 不需要等待所有元素正确渲染,
print应该只打印调用时渲染的内容。所有 PNG 文件似乎都是异步加载的,Selenium 可能不会等待它们被下载和渲染。 -
是的,忘了提,也试过了...
-
您的打印 CSS 设置有问题?
标签: python selenium-webdriver selenium-chromedriver