Puppeteer的page.evaluate传入外部变量显示未定义如何解决
问题原因
page.evaluate 的回调函数是在浏览器隔离上下文中执行的,和Node.js运行上下文完全独立,无法直接读取Node侧声明的变量,必须把需要传递的变量作为page.evaluate的额外参数按顺序传入,你给出的代码刚好缺失了这部分参数传递逻辑,同时还缺少回调的闭合括号。
修复后的代码
let fname = lines[Math.floor(Math.random() * lines.length)].toString() let lname = lines[Math.floor(Math.random() * lines.length)].toString() await page.evaluate((fname, lname) => { document.getElementById('first-name-su').value = fname; document.getElementById('last-name-su').value = lname; }, fname, lname) // 此处按顺序传入Node侧声明的变量即可
额外注意事项
- 传递给
page.evaluate的参数必须是可序列化的,即可以被JSON序列化的类型,函数、Symbol、DOM节点这类不可序列化的内容无法正常传递 - 入参顺序需要和回调函数的参数顺序严格对应,顺序错误会导致赋值混乱
内容的提问来源于stack exchange,提问作者Bmoney
相关产品推荐
相关产品推荐

