木偶:从页面

时间:2020-07-04 12:43:53

标签: javascript node.js puppeteer

我正在借助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”,这就是为什么我希望删除这些链接。

pdf-file

1 个答案:

答案 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
  })
})()