【发布时间】:2019-09-08 16:47:27
【问题描述】:
我正在尝试运行这样的代码:
const login = "login";
await page.$eval('#LoginForm_username', el => el.value = login);
它在表单域中输入login 值。
但是,我不断收到一个奇怪的错误:
错误:评估失败:ReferenceError:未定义登录 在 puppeteer_evaluation_script:1:19 在 ExecutionContext._evaluateInternal (/home/denis/WEB/nlu/node_modules/puppeteer/lib/ExecutionContext.js:122:13) 在 process._tickCallback (internal/process/next_tick.js:68:7) -- ASYNC -- 在执行上下文。 (/home/denis/WEB/nlu/node_modules/puppeteer/lib/helper.js:111:15) 在 ElementHandle.$eval (/home/denis/WEB/nlu/node_modules/puppeteer/lib/JSHandle.js:436:50) 在 process._tickCallback (internal/process/next_tick.js:68:7) -- ASYNC -- 在元素句柄。 (/home/denis/WEB/nlu/node_modules/puppeteer/lib/helper.js:111:15) 在 DOMWorld.$eval (/home/denis/WEB/nlu/node_modules/puppeteer/lib/DOMWorld.js:156:21) 在 process._tickCallback (internal/process/next_tick.js:68:7) -- ASYNC -- 在框架。 (/home/denis/WEB/nlu/node_modules/puppeteer/lib/helper.js:111:15) 在 Page.$eval (/home/denis/WEB/nlu/node_modules/puppeteer/lib/Page.js:347:29) 在页面。 (/home/denis/WEB/nlu/node_modules/puppeteer/lib/helper.js:112:23) 在 crawlForSchedule (/home/denis/WEB/nlu/crawler.js:99:16) 在 process._tickCallback (internal/process/next_tick.js:68:7)
据我了解,这意味着login 变量超出了浏览器上下文或类似情况。
我发现可以像这样使用page.evaluate() 函数传递变量:
const links = await page.evaluate((evalVar) => {
console.log(evalVar); // should be defined now
}, evalVar);
但是如何用page.$eval() 函数做这样的事情呢?或者如何使用page.evaluate() 函数实现所需的行为(表单字段输入)?
【问题讨论】:
标签: javascript node.js puppeteer google-chrome-headless