Javascript 在Puppeter中使用page.$eval()时,如何在浏览器上下文中放置变量?
我正在尝试运行这样的代码:Javascript 在Puppeter中使用page.$eval()时,如何在浏览器上下文中放置变量?,javascript,node.js,puppeteer,google-chrome-headless,Javascript,Node.js,Puppeteer,Google Chrome Headless,我正在尝试运行这样的代码: const login = "login"; await page.$eval('#LoginForm_username', el => el.value = login); const links = await page.evaluate((evalVar) => { console.log(evalVar); // should be defined now }, evalVar); 它在表单字段中输入登录值 然而,我不断得
const login = "login";
await page.$eval('#LoginForm_username', el => el.value = login);
const links = await page.evaluate((evalVar) => {
console.log(evalVar); // should be defined now
}, evalVar);
它在表单字段中输入登录值
然而,我不断得到一个奇怪的错误:
错误:评估失败:引用错误:未定义登录
在《木偶演员》中,剧本:1:19
在ExecutionContext.\u evaluateInternal/home/denis/WEB/nlu/node\u modules/puppeter/lib/ExecutionContext.js:122:13
在进程中。_tickCallbackinternal/process/next_tick.js:68:7-异步-
在执行上下文中/home/denis/WEB/nlu/node_modules/puppeter/lib/helper.js:111:15
位于ElementHandle.$eval/home/denis/WEB/nlu/node_modules/puppeter/lib/JSHandle.js:436:50
在进程中。_tickCallbackinternal/process/next_tick.js:68:7-异步-
在ElementHandle/home/denis/WEB/nlu/node_modules/puppeter/lib/helper.js:111:15
在DOMWorld.$eval/home/denis/WEB/nlu/node_modules/puppeter/lib/DOMWorld.js:156:21
在进程中。_tickCallbackinternal/process/next_tick.js:68:7-异步-
在画面上/home/denis/WEB/nlu/node_modules/puppeter/lib/helper.js:111:15
第页:$eval/home/denis/WEB/nlu/node_modules/puppeter/lib/Page.js:347:29
在第页/home/denis/WEB/nlu/node_modules/puppeter/lib/helper.js:112:23
在crawlForSchedule/home/denis/WEB/nlu/crawler.js:99:16
在进程中。_tickCallback internal/process/next_tick.js:68:7
据我所知,这意味着login变量超出了浏览器上下文或类似的内容
我发现可以使用page.evaluate函数传递变量,如下所示:
const login = "login";
await page.$eval('#LoginForm_username', el => el.value = login);
const links = await page.evaluate((evalVar) => {
console.log(evalVar); // should be defined now
}, evalVar);
但是如何对页面执行类似操作。$eval函数?或者如何使用page.evaluate函数实现所需的行为表单字段输入?尝试以下操作:
const login = "login";
await page.evaluate(login => {
document.querySelector('#LoginForm_username').value = login;
}, login);
接下来,您可以看到可以在何处插入参数。
我们可以看到,参数是一个数组…args,它是在最后一次接收到的
第页。$evalselector,第页函数[,…参数]
因此,我们先传递选择器,然后传递要计算的函数pageFunction,最后传递参数给pageFunction…args
const login=login//您的变量
等待页面。$eval'LoginForm_username',el,loginValue=>{
el.value=登录值
},登入;
el是与document.querySelector'LoginForm\u username'等效的元素
loginValue是您的参数,它将接收变量login或您想要的任何内容
最后,将login变量传递给参数loginValue
由于loginValue是一个参数,因此可以传递任何需要的内容。
例如:
等待页面。$eval'LoginForm_username',el,loginValue=>{
el.value=登录值
}"丹尼斯",;
类似的问题答案这是否回答了您的问题?