我正在使用 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/