提问人:jgran 提问时间:7/23/2023 更新时间:7/23/2023 访问量:33
傀儡师:如何将参数传递给页面评估?
Puppeteer : how to pass argument to page evaluate?
问:
我想将参数传递给 Puppeteer 方法。page evaluate
我可能还在为我不掌握的异步/等待而苦苦挣扎,所以我的知识问题可能更普遍。无论如何,Puppeteer 是当前需要解决的问题。
我有这个用于更新元素的片段。效果很好:
await page.evaluate(
() =>
(document.querySelector(
"selector"
).innerHTML = "WHATEVER")
);
“WHATEVER”值来自外部变量。我需要传递它进行评估。
我试过:
const value = "WHATEVER"
async function setValue(val) {
console.log(val) //OK
await page.evaluate(
() =>{
console.log(val) // KO Error [ReferenceError]: val is not defined
document.querySelector(
"selector"
).innerHTML = val
}
);
}
await setValue(value) // KO
为什么没有定义 val? 在这种情况下,如何将参数传递给页面评估?有没有其他选择?
答:
1赞
Edoardo Balducci
7/23/2023
#1
page.evaluate()
与 Node.js 环境隔离,这意味着它无权访问 Node.js 脚本作用域中的变量。
若要将参数传递给提供给 的函数,应将其作为附加参数包含在内。
实际上,这是方法签名:page.evaluate()
page.evaluate(pageFunction, ...args);
所以你需要这样做,就像这样:
const value = "WHATEVER"
async function setValue(val) {
console.log(val) //OK
await page.evaluate(
(val) => {
console.log(val) // Should be OK now
document.querySelector("selector").innerHTML = val
},
val // This is where you're passing the argument 'val' to the function in page.evaluate()
);
}
await setValue(value)
评论
0赞
jgran
7/23/2023
谢谢。我阅读了页面评估签名,但没有理解。
评论