Selenium Chrome另存为pdf更改下载文件夹

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)

顺便说一句,有人想用特定名称保护文件吗?

kay*_*yoz 5

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)