函数setValue
接收一个值并返回一个函数。在第二个函数中,我试图通过控制台记录value
的值,但我得到
Error: Evaluation failed: ReferenceError: value is not defined
我的代码如下。它可以在try-puppeteer上测试,只需复制并粘贴我的代码并删除require
语句。
const puppeteer = require('puppeteer');
(async () => {
const USERNAME = 'helloworld';
const setValue = (value) => (input) => { console.log(value) };
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('http://example.com');
await page.$eval('.selector', setValue(USERNAME));
await browser.close();
})();
发布于 2018-06-03 01:07:27
这是在Node.js中执行并在浏览器(量角器、TestCafe、噩梦等)中评估代码的任何库的常见问题。函数被字符串化并作为字符串传递给浏览器。(input) => { console.log(value) }
原有作用域丢失,预计value
为全局,未定义。
正如the documentation提到的,应该将额外的参数传递给$eval
。
它应该是:
await page.$eval('.selector', (el, value) => { console.log(value) }, USERNAME);
console.log
可以工作,但显然不会在节点控制台中显示任何内容,因为它指的是浏览器控制台。
https://stackoverflow.com/questions/50657830
复制相似问题