node.js - 传递的函数不能很好地序列化

标签 node.js puppeteer

我正在使用 Puppeteer 从包含订单数据的文件模板中抓取网页。

为此,我使用了 puppeteer 评估函数,该函数在文件位于 .js 中时可以正常工作

但是,当使用“pkg”包编译 .exe 文件或评估执行并启动返回或错误时:“传递的函数不太可序列化!

下面是代码:

const dados = {name: 'foo', year: 1}
  await page.evaluate(dados => {
    let dom = document.querySelector('body');
    const tags = Object.keys(dados);

    for (let i = 0; i < tags.length; i++) {
      const tag = tags[i];
      dom.innerHTML = dom.innerHTML.split(`{{${tag}}}`).join(dados[tag]);
    }
  }, dados);

最佳答案

我尝试使用 pkg 添加 --public 参数。

例如:pkg start.js -t node14-win-x64 --public

然后我就可以自由使用 ElementHandle.evaluate( (elem)=> elem.textContent );

在pkg手册中,--public的意思是:加速并公开顶级项目的源码。

顺便说一句

修复找不到 chrome 二进制文件

browser = await puppeteer.launch({
    executablePath: "node_modules/puppeteer/.local-chromium/win64-782078/chrome-win/chrome.exe"
});

(上面的路径可以随意设置。)

修复start.exe无法运行

有时输出的二进制 exe 无法执行。它 当我们输入start.exe时,总是会弹出一个新的cmd提示窗口。 (或者只需双击。)

  • 只需删除输出 exe,然后重新运行 pkg
  • 检查代码是否可以通过 node start.js 运行

关于node.js - 传递的函数不能很好地序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59021700/

相关文章:

javascript - 迭代深度嵌套的 JavaScript 对象并获取键路径

javascript - 如何计算 HTML 元素内容的可见高度和宽度?

node.js - puppeteer 操作错误 : Navigation failed because browser has disconnected

javascript - 表单提交后 Puppeteer 等待页面加载

node.js - 远程 Angular2 服务器在服务开发构建时挂起

javascript - 无服务器调用本地不执行任何操作

javascript - 如果 Node.js 中发生错误,则重复函数

javascript - 如何正确实现包含awaitMessages 的循环?

google-chrome - 让 Puppeteer 使用本地配置文件的 cookie

javascript - Puppeteer - 在框架内运行函数