我正在借助Node.js和Puppeteer将网页转换为.pdf文件。
这可以正常工作,但是我想先删除此页面上的所有链接,然后再将其转换为.pdf文件,因为否则,.pdf文件包含这些链接,当有人单击它们时无法在我的应用程序中打开这些链接。有办法吗?
该页面是一个使用javascript的.aspx页面。所有链接均以“ javascript:__”开头。这是一个内联网页面,显示我们的用餐情况,我只想将用餐计划显示为.pdf。
.js文件中的内容如下:
const puppeteer = require('puppeteer');
let url = 'http://my-url.de/meals.aspx'
let browser = await puppeteer.launch()
let page = await browser.newPage()
await page.goto(url, {waitUntil: 'networkidle2' })
await page.pdf({
format:"A4",
path:files[0],
displayHeaderFooter: false,
printBackground:true
})
在我的应用中,它说“无法打开URL”,这就是为什么我希望删除这些链接。
答案 0 :(得分:1)
这些似乎不是正确的链接,至少它们不是带有指向网站的href的<a>
标签。
相反,您正在处理需要使用javascript进行导航的链接,这就是为什么这些链接在pdf中不起作用的原因。
您可以做的是在捕获页面之前将所有这些无效的href转换为对pdf有效的内容。
在下面检查我的尝试。由于我无权访问您尝试解析的实际网站,您可能需要对其进行一些修改以适合您的情况。
const puppeteer = require('puppeteer');
let url = 'http://my-url.de/meals.aspx'
(async() => {
let browser = await puppeteer.launch()
let page = await browser.newPage()
await page.goto(url, {
waitUntil: 'networkidle2'
})
// Modifing the page here
await page.evaluate(_ => {
// Capture all links that start with javascript on the href property
// and change it to # instead.
document.querySelectorAll('a[href^="javascript"]')
.forEach(a => {
a.href = '#'
})
});
await page.pdf({
format: "A4",
path: files[0],
displayHeaderFooter: false,
printBackground: true
})
})()