Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Puppeter中使用page.$eval()时,如何在浏览器上下文中放置变量?_Javascript_Node.js_Puppeteer_Google Chrome Headless - Fatal编程技术网

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=登录值 }"丹尼斯",;
类似的问题答案

这是否回答了您的问题?