使用python+selenium写一个使用打印预览-另存为pdf的程序,并使用pyinstaller打包

这篇博客详细介绍了如何利用Python的selenium库和Chrome浏览器生成PDF,包括设置浏览器驱动、配置打印选项以及使用headless模式的注意事项。此外,还讲解了如何将程序用pyinstaller打包成可执行文件,以便于部署和运行。

第一步,下载selenium

命令行输入pip install selenium,等待下载完成

第二步,安装浏览器驱动

我下载的chrom的驱动:https://registry.npmmirror.com/binary.html?path=chromedriver/

要下载对应于浏览器版本的驱动,否则程序将无法正确运行。

其他浏览器,或下载源:

Firefox浏览器驱动:geckodriver

Chrome浏览器驱动:chromedriver ,CNPM Binaries Mirror (npmmirror.com)taobao备用地址

IE浏览器驱动:IEDriverServer

Edge浏览器驱动:MicrosoftWebDriver

Opera浏览器驱动:operadriver

PhantomJS浏览器驱动:phantomjs

第三步,配置驱动地址

先导入包,然后因为版本更新,所以路径被整合入service中

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

path = Service("chromedriver.exe") #如果driver文件和此py文件放在一个文件夹内可以这样写路径,这样打包后driver文件和exe文件放在一个文件夹内就行
#path = Service(r"C:\Users\22505\Downloads\chromedriver_win32\chromedriver.exe")  # 注意这个路径需要时可执行路径(chmod 777 dir or 755 dir)
driver = webdriver.Chrome(service=path)

链接前的r,我推测代表使用电脑上的路径表示方式,否则斜杠需要换个方向,或者写两个\ 表示转义。

第四步,测试连接

配置以后使用get命令打开驱动进行网页查看。

driver.get("https://www.这是个测试链接.com")

要加 “ https:// ” 否则会说参数错误。

用selenium打印pdf

两种方式

方式一

调用chrome自带的打印,通过打印另存为pdf

需要设置settings

settings = {
    "recentDestinations": [{
        "id": "Save as PDF",
        "origin": "local",
        "account": ""
    }],
    "selectedDestinationId": "Save as PDF",
    "version": 2, # 另存为pdf,1 是默认打印机
    "isHeaderFooterEnabled": True, # 是否勾选页眉和页脚

    # "customMargins": {},
    # "marginsType": 2,
    # "scaling": 100,
    # "scalingType": 3,
    # "scalingTypePdf": 3,
    # "isLandscapeEnabled":True,#landscape横向,portrait 纵向,若不设置该参数,默认纵向
    "isCssBackgroundEnabled": True, # 是否勾选背景图形
    "mediaSize": {
        "height_microns": 297000,
        "name": "ISO_A4",
        "width_microns": 210000,
        "custom_display_name": "A4 210 x 297 mm"
    },
}
prefs = {
    'printing.print_preview_sticky_settings.appState': json.dumps(settings),
    'savefile.default_directory': savepath, 
    #此处填写你希望文件保存的路径
}
chrome_options.add_argument('--kiosk-printing') 
#静默打印,无需用户点击打印页面的确定按钮
chrome_options.add_experimental_option('prefs', prefs)

然后是设置experimental option的参数,显示导入settings,然后保存路径。

# 利用js修改网页的title,该title最终就是PDF文件名,利用js的window.print可以快速调出浏览器打印窗口,避免使用热键ctrl+P   my_test_file1
    driver.execute_script('document.title="'+webName1[num]+'.pdf";window.print();')

然后使用js命令调出打印窗口,ctrl + p 不知道怎么用。

这个方法没法使用headless无头模式,因为无头模式是个沙盒,无法加载插件,听说可以使用pywin32实现。

方式二

使用print to pdf 转化为pdf再打印。本次需求中人工方式就是打印预览,而且需要时间戳,所以这个方法不一定适用本次需求,所以没有学习尝试。

处理一些直接输入链接无法访问的网站

首先通过selenium打开首页

然后通过driver获取标签的功能输入要查询的,然后点击

获取xpath可以检查源码,找到需要的标签然后右击-复制-复制xpath就能获得

By需要引入

from selenium.webdriver.common.by import By

def fangfa(driver,comName):
    driver.get("首页链接")
    input = driver.find_element(By.XPATH,'xpath') #获取输入框
    input.clear() # 清空输入框
    input.send_keys(comName) # 再输入框内输入要输入的文字
    click = driver.find_element(By.XPATH,'//*[@id="search"]')	# 获取需要点击的标签
    click.click() # 点击操作
    driver.close() # 关闭窗口
    # now_handle = driver.current_window_handle
    all_handles = driver.window_handles # 获取窗口的句柄
    # for handles in all_handles:
    #     if now_handle != handles:
    driver.switch_to.window(all_handles[-1]) # 切换窗口
    time.sleep(2)
    driver.execute_script('document.title="保存文件的名字.pdf";window.print();')
    time.sleep(2)

打包python程序

打包

一个初级的打包,只打包了py文件。

1.下载pyinstaller

pip install pyinstaller

2.进入py文件所在文件夹,然后打开控制台,输入

pyinstaller -F --icon=图标文件.ico py文件.py

然后文件夹中会出现一个dist,里面就是打包好的exe文件。

运行

要把下载的driver文件和python文件放一起。

一些打包的命令

打包指令

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值