【发布时间】:2020-11-20 23:43:09
【问题描述】:
正如我在文档 (here) 中看到的,我们可以像这样将 js 函数暴露给页面,
function do_many_operations(elem) {
let rect = elem.getBoundingClientRect();
return rect;
}
async function dummy_fn1(page) {
// Expose function here
await page.exposeFunction("do_many_operations", do_many_operations);
let temp = await page.evaluate(async (a, b) => {
let elems = document.querySelectorAll("p");
// Use function here
let rect = await do_many_operations(elems[0]);
}, 1, 2);
}
但是,代码中断并显示错误消息,
Error: Evaluation failed: TypeError: elem.getBoundingClientRect is not a function
这意味着 elem arg 到 do_many_operations 不是有效的元素或节点,为什么??
另一个问题是,我们可以将函数注入浏览器上下文吗?这样我们就不必为创建的新页面一次又一次地注入函数。
【问题讨论】:
-
顺便说一句,
addScriptTag可以很好地解决我上面的问题,但仍然想知道推荐的方法是什么。
标签: javascript puppeteer