- 编写脚本
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文件
文章评论