如何使用 Selenium 为 PDF 打印指定打印位置
How to specify print location for PDF printing with Selenium
无论我做什么,文件都会不断打印到我的下载(Windows 默认)文件夹中,而不是指定的文件夹中。我做了我的研究,显然应该使用 savefile.default_directory
选项而不是 download.default_directory
但它无论如何都不起作用。我尝试从路径中删除尾随 \
但没有成功。如果有任何不同,这是在工作 PC 上,Windows 10 台机器。
import os
os.environ["PATH"] += os.pathsep + r'C:\Program Files (x86)\Chromedriver99';
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
options = Options()
options.add_experimental_option(
"prefs",
{
"download.prompt_for_download": False,
"profile.default_content_setting_values.automatic_downloads": 1,
"download.default_directory": r"C:\Users\Lucas\Downloads\ECV\",
"savefile.default_directory": r"C:\Users\Lucas\Downloads\ECV\",
"download.directory_upgrade": True,
"safebrowsing.enabled": True # Some answers include this, makes no difference
},
)
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)
# PDF printing settings
print_settings = {
"recentDestinations": [{
"id": "Save as PDF",
"origin": "local",
"account": "",
}],
"selectedDestinationId": "Save as PDF",
"version": 2,
"isHeaderFooterEnabled": False,
"isLandscapeEnabled": True
}
prefs = {'printing.print_preview_sticky_settings.appState': json.dumps(print_settings)}
options.add_experimental_option('prefs', prefs)
options.add_argument('--kiosk-printing') # Some answers include this, makes no difference
driver = webdriver.Chrome(options=options)
driver.get('https://whosebug.com/')
driver.execute_script('window.print();')
您有两个问题,第一个是您将 prefs
设置了两次,并且由于 add_experimental_option()
正在使用字典作为选项,因此第二个设置会覆盖第一个设置,所有这些设置实际上被删除了。
self._experimental_options = {}
def add_experimental_option(self, name, value):
"""
Adds an experimental option which is passed to chrome.
Args:
name: The experimental option name.
value: The option value.
"""
self._experimental_options[name] = value
第二个问题是在路径上使用原始字符串r
,它计算为C:\Users\Lucas\Downloads\ECV\\
,这是无效的。使用 /
而不是 \
"C:/Users/Lucas/Downloads/ECV/"
或使用 \
而不使用 r
"C:\Users\Lucas\Downloads\ECV\"
print_settings = {
"recentDestinations": [{
"id": "Save as PDF",
"origin": "local",
"account": "",
}],
"selectedDestinationId": "Save as PDF",
"version": 2,
"isHeaderFooterEnabled": False,
"isLandscapeEnabled": True
}
prefs = {'printing.print_preview_sticky_settings.appState': json.dumps(print_settings),
"download.prompt_for_download": False,
"profile.default_content_setting_values.automatic_downloads": 1,
"download.default_directory": "C:\Users\Lucas\Downloads\ECV\",
"savefile.default_directory": "C:\Users\Lucas\Downloads\ECV\",
"download.directory_upgrade": True,
"safebrowsing.enabled": True}
options = Options()
options.add_experimental_option('prefs', prefs)
options.add_argument('--kiosk-printing')
driver = webdriver.Chrome(options=options)
driver.get('https://whosebug.com/')
driver.execute_script('window.print();')
无论我做什么,文件都会不断打印到我的下载(Windows 默认)文件夹中,而不是指定的文件夹中。我做了我的研究,显然应该使用 savefile.default_directory
选项而不是 download.default_directory
但它无论如何都不起作用。我尝试从路径中删除尾随 \
但没有成功。如果有任何不同,这是在工作 PC 上,Windows 10 台机器。
import os
os.environ["PATH"] += os.pathsep + r'C:\Program Files (x86)\Chromedriver99';
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
options = Options()
options.add_experimental_option(
"prefs",
{
"download.prompt_for_download": False,
"profile.default_content_setting_values.automatic_downloads": 1,
"download.default_directory": r"C:\Users\Lucas\Downloads\ECV\",
"savefile.default_directory": r"C:\Users\Lucas\Downloads\ECV\",
"download.directory_upgrade": True,
"safebrowsing.enabled": True # Some answers include this, makes no difference
},
)
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)
# PDF printing settings
print_settings = {
"recentDestinations": [{
"id": "Save as PDF",
"origin": "local",
"account": "",
}],
"selectedDestinationId": "Save as PDF",
"version": 2,
"isHeaderFooterEnabled": False,
"isLandscapeEnabled": True
}
prefs = {'printing.print_preview_sticky_settings.appState': json.dumps(print_settings)}
options.add_experimental_option('prefs', prefs)
options.add_argument('--kiosk-printing') # Some answers include this, makes no difference
driver = webdriver.Chrome(options=options)
driver.get('https://whosebug.com/')
driver.execute_script('window.print();')
您有两个问题,第一个是您将 prefs
设置了两次,并且由于 add_experimental_option()
正在使用字典作为选项,因此第二个设置会覆盖第一个设置,所有这些设置实际上被删除了。
self._experimental_options = {}
def add_experimental_option(self, name, value):
"""
Adds an experimental option which is passed to chrome.
Args:
name: The experimental option name.
value: The option value.
"""
self._experimental_options[name] = value
第二个问题是在路径上使用原始字符串r
,它计算为C:\Users\Lucas\Downloads\ECV\\
,这是无效的。使用 /
而不是 \
"C:/Users/Lucas/Downloads/ECV/"
或使用 \
而不使用 r
"C:\Users\Lucas\Downloads\ECV\"
print_settings = {
"recentDestinations": [{
"id": "Save as PDF",
"origin": "local",
"account": "",
}],
"selectedDestinationId": "Save as PDF",
"version": 2,
"isHeaderFooterEnabled": False,
"isLandscapeEnabled": True
}
prefs = {'printing.print_preview_sticky_settings.appState': json.dumps(print_settings),
"download.prompt_for_download": False,
"profile.default_content_setting_values.automatic_downloads": 1,
"download.default_directory": "C:\Users\Lucas\Downloads\ECV\",
"savefile.default_directory": "C:\Users\Lucas\Downloads\ECV\",
"download.directory_upgrade": True,
"safebrowsing.enabled": True}
options = Options()
options.add_experimental_option('prefs', prefs)
options.add_argument('--kiosk-printing')
driver = webdriver.Chrome(options=options)
driver.get('https://whosebug.com/')
driver.execute_script('window.print();')