目录

需求思路步骤具体代码

需求

selenium爬取页面的时候有时需要保持页面为PDF格式 并且不能使用pdfkit 模块(有的网址限制必须浏览器打开)

思路步骤

一:导入模块二:在初始化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()

精彩内容

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: