木偶页面评估使用页面评估中的require模块

时间:2020-04-28 18:49:02

标签: node.js module puppeteer require

我不明白如何在page.evaluate中使用模块,我也在SO How to pass required module object to puppeteer page.evaluate SO上找到了此帖子

但是我不知道如何使用它,

await page.addScriptTag({ path: './node_modules/fs.realpath/index.js'});

我得到了:

错误:评估失败:类型错误:fs.appendFileSync不是函数

const fs = require('fs');

page.evaluate(()=>{
        let elements = document.querySelectorAll("a.myclass.vid");

        elements.forEach((element, index) => {
            fs.appendFileSync("textresult.txt", element.textContent+"\r\n");
        })

    });

感谢您的阐述:o)

1 个答案:

答案 0 :(得分:0)

您传递给page.evaluate()的匿名函数在运行puppeteer的网页的上下文中运行,因此,它当然不知道fs是什么。您需要从该匿名函数返回一些信息,然后使用以下命令调用fs.appendFileSync

const texts = await page.evaluate(() => {
  return document.querySelectorAll('a.myclass.vid').map((el) => {
    return el.textContent + "\r\n"
  })
})

fs.appendFileSync('textresult.txt', texts)