Oli*_*ner 4 python selenium web-scraping
我想将网站下载为 pdf 文件,它工作正常,但它应该将文件下载到特定路径,而不是将文件下载到我的默认下载目录。
import json
from selenium import webdriver
appState = {
"recentDestinations": [
{
"id": "Save as PDF",
"origin": "local"
}
],
"selectedDestinationId": "Save as PDF",
"version": 2,
'download.default_directory': 'C:\\Users\\Oli\\Google Drive',
"download.directory_upgrade": True
}
profile = {'printing.print_preview_sticky_settings.appState': json.dumps(appState)}
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option('prefs', profile)
chrome_options.add_argument('--kiosk-printing')
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get('https://www.google.com/')
driver.execute_script('window.print();')
Run Code Online (Sandbox Code Playgroud)
顺便说一句,有人想用特定名称保护文件吗?
该download.default_directory设置仅适用于下载的内容。Chrome 以不同的方式处理保存在页面上的文件。要更改页面打印输出的默认文件夹,只需设置该savefile.default_directory值即可。
因此,为自定义位置打印为 pdf 的完整示例:
import json
from selenium import webdriver
appState = {
"recentDestinations": [
{
"id": "Save as PDF",
"origin": "local",
"account": ""
}
],
"selectedDestinationId": "Save as PDF",
"version": 2
}
profile = {'printing.print_preview_sticky_settings.appState': json.dumps(appState),
'savefile.default_directory': 'path/to/dir/'}
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option('prefs', profile)
chrome_options.add_argument('--kiosk-printing')
driver = webdriver.Chrome(options=chrome_options)
driver.get(url)
driver.execute_script('window.print();')
Run Code Online (Sandbox Code Playgroud)
小智 2
download.default_directory可以不添加到appState但可以添加"prefs"到add_experimental_option
喜欢:
chrome_options.add_experimental_option("prefs", {
'download.default_directory': 'C:\\Users\\Oli\\Google Drive',
'download.directory_upgrade': True
})
Run Code Online (Sandbox Code Playgroud)
但在你的情况下它没有帮助,因为此选项设置“文件 - >另存为”的位置,并且你需要“打印 - >另存为”
作为解决方法,您可以使用--print-to-pdfChrome 的参数(不需要运行 Chrome Webdriver,但 Chrome 本身处于无头模式)
import os
path_to_file = 'C:\\Users\\Oli\\Google Drive\\'
name_of_file = '1.pdf'
page_to_open = 'http://example.com'
command_to_run = 'start chrome --headless --print-to-pdf="{0}{1}" {2}'.format(path_to_file, name_of_file, page_to_open)
print('launch:'+command_to_run)
os.popen(command_to_run)
Run Code Online (Sandbox Code Playgroud)
请小心,因为它在静默模式下运行,如果未创建文件,则不会出现警告消息(例如,如果没有这样的目录,或者没有 C:\Users 的管理员权限,或者没有这样的网页)。
您始终可以在命令行(cmd)中进行测试,例如:
start chrome --headless --print-to-pdf="C:\\temp\\1.pdf" http://example.com
Run Code Online (Sandbox Code Playgroud)