需求
selenium爬取页面的时候有时需要保持页面为PDF格式 并且不能使用pdfkit 模块(有的网址限制必须浏览器打开)文章来源地址https://www.toymoban.com/news/detail-551414.html
思路步骤
- 一:导入模块
- 二:在初始化driver对象的时候设定,浏览器静默保存(即保存时不弹出另存为按钮)和默认保存位置
- 三:打开所需网页
- 四:调用js打开打印窗口
- 修改当前页面标题(因为保存文件名就是标题名)并静默下载
具体代码
import json
from selenium.webdriver.common.by import By
from seleniumwire import webdriver
chrome_options = webdriver.ChromeOptions()
settings = {
"recentDestinations": [{
"id": "Save as PDF",
"origin": "local",
"account": ""
}],
"selectedDestinationId": "Save as PDF",
"version": 2, # 另存为pdf,1 是默认打印机
"isHeaderFooterEnabled": True, # 是否勾选页眉和页脚
# "customMargins": {},
# "marginsType": 2,#边距(2是最小值、0是默认)
# "scaling": 100, # 缩放比例 100 表示不缩放
# "scalingType": 3,
# "scalingTypePdf": 3,
# "isLandscapeEnabled": True, # 若不设置该参数,默认值为纵向
"isCssBackgroundEnabled": True,
"mediaSize": {
"height_microns": 297000,
"name": "ISO_A4",
"width_microns": 210000,
"custom_display_name": "A4"
},
}
chrome_options.add_argument('--enable-print-browser')
# chrome_options.add_argument('--headless') #headless模式下,浏览器窗口不可见,应当可提高效率
save_path = r'C:\Users\Administrator\Desktop'
prefs = {
'printing.print_preview_sticky_settings.appState': json.dumps(settings),
'savefile.default_directory': save_path,
}
chrome_options.add_argument('--kiosk-printing') # 静默打印,无需用户点击打印页面的确定按钮
chrome_options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(chrome_options=chrome_options) # 初始化浏览器
# 打开需要保持的网址并等待加载完成图片
driver.get('https://alifei04.cfp.cn/creative/vcg/800/version23/VCG41175510742.jpg')
driver.implicitly_wait(10)
element = driver.find_element(by=By.XPATH, value='/html/body/img')
# 调用js 保持PDF
save_file_name = 'test.pdf'
driver.execute_script(
f'document.title="{save_file_name}";window.print();') # 利用js修改网页的title,该title最终就是PDF文件名,利用js的window.print可以快速调出浏览器打印窗口,避免使用热键ctrl+P
input('*----') # 可以做其他事情 但是不嫩立即qiut 否则关闭浏览器了后就不能下载了
driver.quit()
文章来源:https://www.toymoban.com/news/detail-551414.html
到了这里,关于selenium利用javascript进行自动打印网页为PDF的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!