VMx

vmx.im
啥都学一点的填坑人
  1. 首页
  2. 未分类
  3. 正文

定时打印或截图

2024年6月5日 344点热度 1人点赞 0条评论
  • 编写脚本
import time
import json
import os
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options

save_path = os.getcwd() # 当前文件所在的文件夹路径
options = Options()
settings = {
    "recentDestinations": [{
        "id": "Save as PDF",
        "origin": "local",
        "account": ""
    }],
    "selectedDestinationId": "Save as PDF",
    "version": 2,  # 另存为pdf,1 是默认打印机
    "isHeaderFooterEnabled": True,  # 是否勾选页眉和页脚
    "isCssBackgroundEnabled": True,  # 是否勾选背景图形
    "mediaSize": {
        "height_microns": 297000,
        "name": "ISO_A4",
        "width_microns": 210000,
        "custom_display_name": "A4",
    },
}
prefs = {
    'printing.print_preview_sticky_settings.appState': json.dumps(settings),
    'savefile.default_directory': save_path,
}
options.add_argument('--enable-print-browser') # 这一行试了,可用可不用
options.add_argument('--kiosk-printing')  # 静默打印,无需用户点击打印页面的确定按钮
options.add_experimental_option('prefs', prefs)
service = Service(executable_path="chromedriver.exe") # 谷歌浏览器驱动路径
driver = webdriver.Chrome(service=service, options=options)
driver.get(url)
fileName=time.strftime("_%y%m%d_%H%M%S", time.localtime())
# 1.自定义pdf文件名字
driver.execute_script(f'document.title="{fileName}";window.print();')
# 2.默认pdf文件名字
# driver.execute_script('window.print();')
# sleep这一行非常关键,时间短了,导致pdf还未生成,浏览器就关闭了。
# 如果html图片较多,保存的pdf文件较大,或者如果电脑配置不好,等待时间可以再设置长一点。
time.sleep(5)

在多 iframe 中居然只打印 frame,可通过截图来解决

import time
import datetime
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
import os
from PIL import Image, ImageDraw, ImageFont

browser = webdriver.Chrome()

browser.get('http://url.com/url')
wait=WebDriverWait(browser, 10)
time.sleep(5)
// 此页面需要多个 iframe才可进到需要的页面
browser.switch_to.frame('TopLevelFrame')
browser.switch_to.frame('topframe')
elem = browser.find_element(By.ID, "COUNTER-anchor").click()  # Find the search box
time.sleep(5)

# 修改浏览器窗口大小
browser.set_window_size(900,1100)

current_time=datetime.datetime.now().strftime("%Y-%m-%d")
file_name=current_time + ".png"
browser.save_screenshot("temp.png") //截图保存至 temp.png
browser.quit()

# 打开背景图片
background = Image.open("temp.png")

# 创建一个可以绘图的图层
draw = ImageDraw.Draw(background)

# 定义时间格式和字体
font = ImageFont.truetype("arial.ttf", 30)

# 计算时间文本的大小
# text_width, text_height = draw.textsize(current_time, font=font)

# # 设置时间文本的位置
# x = (background.width - text_width) / 2
# y = (background.height - text_height) / 2

# 绘制时间文本
draw.text((100, 20), current_time, font=font, fill=(255, 0, 0))

# 保存新的图片
os.remove("temp.png")
background.save(file_name)
  • 打包应用

通过pyinstaller进行打包
pyinstaller --onefile your_script.py -F -p C:/python/lib/site-packages

如打包后出现模块无法找到的问题,一般需要指定 site-packages 的目录,如是虚拟环境则指向 ./.venv/lib/site-packages

  • 添加定时

windows时添加一个定时程序,记得设置运行目录,运行目录中必须有对应的 chromedriver.exe文件

Post Views: 344
标签: 暂无
最后更新:2024年6月28日

huifei

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2021 vmx.im. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang