0


使用python+selenium写一个使用打印预览-另存为pdf的程序,并使用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

deffangfa(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文件放一起。

一些打包的命令

打包指令

标签: python selenium chrome

本文转载自: https://blog.csdn.net/Groovetech/article/details/125954225
版权归原作者 Brilliance_DZ 所有, 如有侵权,请联系我们删除。

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

还没有评论