首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在无头模式下用Selenium Chrome驱动程序打印PDF

在无头模式下用Selenium Chrome驱动程序打印PDF
EN

Stack Overflow用户
提问于 2022-09-10 21:58:35
回答 1查看 295关注 0票数 1

我没有问题打印没有无头模式,但一旦我启用无头模式,它只是拒绝打印一个PDF。我目前正在开发一个带有GUI的应用程序,所以如果可能的话,我不想让最终用户看到Selenium。

在这个项目中,我使用了一个较旧版本的Selenium,4.2.0。再加上Python3.9。

代码语言:javascript
运行
复制
import os
from os.path import exists
import json
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver import Chrome, ChromeOptions

# Paths
dir_path = os.getcwd()
download_path = os.path.join(dir_path, "letters")
chrome_path = os.path.join(dir_path, "chromium\\app\\Chrome-bin\\chrome.exe")
user_data_path = os.path.join(dir_path, "sessions")

website = "https://www.google.com/"


def main():
    print_settings = {
        "recentDestinations": [{
            "id": "Save as PDF",
            "origin": "local",
            "account": "",
        }],
        "selectedDestinationId": "Save as PDF",
        "version": 2,
        "isHeaderFooterEnabled": False,
        "isLandscapeEnabled": True
    }

    options = ChromeOptions()
    options.binary_location = chrome_path
    options.add_argument("--start-maximized")
    options.add_argument('--window-size=1920,1080')
    options.add_argument(f"user-data-dir={user_data_path}")
    options.add_argument("--headless")
    options.add_argument('--enable-print-browser')
    options.add_experimental_option("prefs", {
        "printing.print_preview_sticky_settings.appState": json.dumps(print_settings),
        "savefile.default_directory": download_path,  # Change default directory for downloads
        "download.default_directory": download_path,  # Change default directory for downloads
        "download.prompt_for_download": False,  # To auto download the file
        "download.directory_upgrade": True,
        "profile.default_content_setting_values.automatic_downloads": 1,
        "safebrowsing.enabled": True
    })
    options.add_argument("--kiosk-printing")

    driver = Chrome(service=Service(ChromeDriverManager().install()), options=options)
    driver.get(website)
    driver.execute_script("window.print();")

    if exists(os.path.join(user_data_path, "Google.pdf")):
        print("YAY!")
    else:
        print(":(")


if __name__ == '__main__':
    main()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-11 18:09:23

对于遇到类似问题的其他人,我使用这里描述的打印方法修复了它:Selenium print PDF in A4 format

使用上面的示例,我替换了:

代码语言:javascript
运行
复制
driver.execute_script("window.print();")

通过以下方式:

代码语言:javascript
运行
复制
pdf_data = driver.execute_cdp_cmd("Page.printToPDF", print_settings)
with open('Google.pdf', 'wb') as file:
    file.write(base64.b64decode(pdf_data['data']))

对我来说挺好的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73675431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档