实现目的
利用python的selenium库实现批量网页打印为PDF
预备知识
- selenium库的简单了解
- 浏览器的启动参数
- re库函数了解(re.complie, re.findall)
- js调用浏览器窗口
代码实现
代码语言:javascript复制import json
import re
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--enable-print-browser') # 启用PrintBrowser模式,其中所有内容都呈现为打印
chrome_options.add_argument('--kiosk-printing') # 在打印预览中自动按下打印按钮
settings = {
"recentDestinations": [
{
"id": "Save as PDF",
"origin": "local"
}
],
"selectedDestinationId": "Save as PDF",
"version": 2
}
prefs = {
'printing.print_preview_sticky_settings.appState': json.dumps(settings),
'savefile.default_directory': 'C:\Users\admin\Desktop\pdf' # 下载文件保存的路径
}
chrome_options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(options=chrome_options)
for num in range(1,1854):
url = 'https://tttang.com/archive/%d/'%num # 通过对网站url特点分析,遍历出每篇文章,也可以通过其他特点遍历出各分类的文章
driver.get(url)
a = driver.page_source # 获取网页源代码
if '404 not found' not in a and '点击跳转' not in a: # 防止无效的404页面
title1 = re.compile("<title>(.*)</title>") # 通过正则表达式定位到文章标题
title = title1.findall(a)[0][:-6] # 切片去除无意义的后缀
js = "document.title='" title "';window.print();" # 保存文件的文件名是文章标题,使用js的window.print()调出打印窗口,避免使用ctrl P
driver.execute_script(js)
本文采用CC-BY-SA-3.0协议,转载请注明出处 Author: ph0ebus