每当我尝试传递一个函数时,如下所示:
var myFunc = function() { console.log("lol"); };
await page.evaluate(func => {
func();
return true;
}, myFunc);
I get:
(node:13108) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Evaluation failed: TypeError: func is not a function
at func (<anonymous>:9:9)
(node:13108) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
为什么?怎样做才正确呢?
谢谢你!
€:让我澄清一下:我这样做是因为我想首先找到一些 DOM 元素并在该函数内部使用它们,更像这样(简化):
var myFunc = function(element) { element.innerHTML = "baz" };
await page.evaluate(func => {
var foo = document.querySelector('.bar');
func(foo);
return true;
}, myFunc);
您不能直接将函数传递给page.evaluate()
,但你可以调用另一个特殊方法(page.exposeFunction
),它将您的函数公开为全局函数(也可以作为页面的属性window
object),这样你就可以在里面调用它page.evaluate()
:
var myFunc = function() { console.log("lol"); };
await page.exposeFunction("myFunc", myFunc);
await page.evaluate(async () => {
await myFunc();
return true;
});
只要记住这一点page.exposeFunction()
会让你的函数返回一个Promise
,那么,你需要使用async
and await
。发生这种情况是因为你的函数不会在浏览器中运行,但在你的内部nodejs
应用。
- hideFunction() 在 goto() 之后不起作用
- 为什么我无法使用 Puppeteer 访问 hideFunction() 函数中的“窗口”?
- 如何使用evaluateOnNewDocument和exposeFunction?
- ExposureFunction 保留在内存中吗?
- Puppeteer:在 .evaluate() 中传递变量
- Puppeteer 评估函数
- 允许将参数化函数作为字符串传递给 page.evaluate
- 与 page.exposeFunction() 绑定的函数会产生未处理的承诺拒绝
- 公开的函数 queryseldtcor 在 puppeteer 中不起作用
- 如何使用 Puppeteer 动态注入函数进行评估?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)