Puppeteer抓取pdf 文件
2024-09-13 17:11:15
chrome中内置了plugin pdf.js来处理pdf文件,用户点击pdf文件后,变成预览。 在直接抓取时,会弹出一个新的窗口,在新窗口先下载pdf.js相关的页面,然后用chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/类似的请求来下载实际内容。 程序中可以从这个请求中,取回bytes,然后存为pdf.
const tarType = target.type()
let resUrl
let idx = 1
if (tarType === 'other') {
target.asPage().then(oPage=>{
if (oPage) {
oPage.on('response', async (response) => {
......
if (resUrl.startsWith('chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/') && !resUrl.endsWith('.js')) {
if (response.ok()) {
data = await response.buffer()
await fs.writeFile('pdfs\\' + qs.unescape(fileName), data)
可是这样做有个问题,就是正常情况下,pdf是在一个新窗口,但点击几次后,有可能在本窗口打开,就是page.close()就会报错。
试了几种方法,也不知原因,只好绕过。
- puppeteer运行后,先进入设置,把pdf的打开方式变成"下载"
- 再通过设置下载路径,让pdf自动到新路径下
await client.send('Page.setDownloadBehavior', {
behavior: 'allow',
downloadPath: 'D:\\Projects\\skyCrawler\\pdfs'
});