Javascript 木偶演员奇怪的行为

Javascript 木偶演员奇怪的行为,javascript,node.js,scope,undefined,puppeteer,Javascript,Node.js,Scope,Undefined,Puppeteer,我正在尝试使用Puppeter自动填充表单,但它不断抛出ReferenceError:文本未定义,即使它在控制台前定义了一行。日志成功显示了它 这是引发错误的行: wait page.$eval('chat message text',el=>el.value=text) 如果我用el.value='blablabla'之类的东西填充它,它会工作得很好 最奇怪的是console.log(文本)也可以正常工作,然后抛出一个错误 puppeteer.launch({ headless: false

我正在尝试使用Puppeter自动填充表单,但它不断抛出
ReferenceError:文本未定义
,即使它在控制台前定义了一行。日志成功显示了它

这是引发错误的行:
wait page.$eval('chat message text',el=>el.value=text)
如果我用
el.value='blablabla'
之类的东西填充它,它会工作得很好

最奇怪的是
console.log(文本)也可以正常工作,然后抛出一个错误

puppeteer.launch({ headless: false }).then(async browser => {

  const page = await browser.newPage()
  var cookie = [here are my cookies]

  await page.setCookie(...cookie)
  await page.goto('https://example.com')
  await page.waitFor(5000);

  await page.solveRecaptchas()
  console.log('Captcha was solved');
  await page.waitFor(5000);

  var text = JSON.parse(fs.readFileSync('/Users/apple/Desktop/test/text.json', 'utf8'));
  console.log("Sending text");
  console.log(text);
  await page.$eval('#chat-message-text', el => el.value = text);
  await page.waitFor(1000);
  await page.waitForSelector('button[class="btn btn-primary send-chat-btn"]');
  await page.click('button[class="btn btn-primary send-chat-btn"]');
  await page.waitFor(2000);
  await browser.close()
})
完整错误日志:

(node:86035) UnhandledPromiseRejectionWarning: Error: Evaluation failed: ReferenceError: text is not defined
    at __puppeteer_evaluation_script__:1:19
    at ExecutionContext._evaluateInternal (/Users/apple/Desktop/test/node_modules/puppeteer/lib/ExecutionContext.js:122:13)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)
  -- ASYNC --
    at ExecutionContext.<anonymous> (/Users/apple/Desktop/test/node_modules/puppeteer/lib/helper.js:111:15)
    at ElementHandle.evaluate (/Users/apple/Desktop/test/node_modules/puppeteer/lib/JSHandle.js:54:42)
    at ElementHandle.<anonymous> (/Users/apple/Desktop/test/node_modules/puppeteer/lib/helper.js:112:23)
    at ElementHandle.$eval (/Users/apple/Desktop/test/node_modules/puppeteer/lib/JSHandle.js:505:40)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)
  -- ASYNC --
    at ElementHandle.<anonymous> (/Users/apple/Desktop/test/node_modules/puppeteer/lib/helper.js:111:15)
    at DOMWorld.$eval (/Users/apple/Desktop/test/node_modules/puppeteer/lib/DOMWorld.js:156:21)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)
  -- ASYNC --
    at Frame.<anonymous> (/Users/apple/Desktop/test/node_modules/puppeteer/lib/helper.js:111:15)
    at Page.$eval (/Users/apple/Desktop/test/node_modules/puppeteer/lib/Page.js:345:29)
    at Page.<anonymous> (/Users/apple/Desktop/test/node_modules/puppeteer/lib/helper.js:112:23)
    at puppeteer.launch.then (/Users/apple/Desktop/test/app/test2.js:151:14)
    at <anonymous>
(node:86035) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:86035) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
(节点:86035)未处理的Promisejection警告:错误:评估失败:引用错误:未定义文本
在(木偶演员)(评估)(剧本):1:19
在ExecutionContext.\u evaluateInternal(/Users/apple/Desktop/test/node\u modules/puppeter/lib/ExecutionContext.js:122:13)
在
在进程中。_tick回调(内部/process/next_tick.js:188:7)
--异步的--
在执行上下文中。(/Users/apple/Desktop/test/node_modules/puppeter/lib/helper.js:111:15)
在ElementHandle.evaluate(/Users/apple/Desktop/test/node_modules/puppeter/lib/JSHandle.js:54:42)
在ElementHandle。(/Users/apple/Desktop/test/node_modules/puppeter/lib/helper.js:112:23)
位于ElementHandle.$eval(/Users/apple/Desktop/test/node_modules/puppeter/lib/JSHandle.js:505:40)
在
在进程中。_tick回调(内部/process/next_tick.js:188:7)
--异步的--
在ElementHandle。(/Users/apple/Desktop/test/node_modules/puppeter/lib/helper.js:111:15)
在DOMWorld.eval(/Users/apple/Desktop/test/node_modules/puppeter/lib/DOMWorld.js:156:21)
在
在进程中。_tick回调(内部/process/next_tick.js:188:7)
--异步的--
在画面上。(/Users/apple/Desktop/test/node_modules/puppeter/lib/helper.js:111:15)
第$eval页(/Users/apple/Desktop/test/node_modules/puppeter/lib/Page.js:345:29)
在第页。(/Users/apple/Desktop/test/node_modules/puppeter/lib/helper.js:112:23)
在puppeter.launch.then(/Users/apple/Desktop/test/app/test2.js:151:14)
在
(节点:86035)未处理的PromisejectionWarning:未处理的承诺拒绝。此错误源于在没有catch块的异步函数中抛出,或者拒绝未使用.catch()处理的承诺。(拒绝id:1)
(节点:86035)[DEP0018]弃用警告:未处理的承诺拒绝已弃用。将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程。

试试这个:
等待页面。$eval('chat message text',el=>el.value=text,text)相同。我认为问题在于有两个不同的作用域1)node.js 2)browser,文本仅在1)中定义,而不是在2)中定义,我不知道如何将其传递给browser I不这么认为,您无法访问eval范围中的文本变量,您必须如上所述传递它。这来自官方api文档:
page.$eval(选择器,pageFunction[,…args])
我将尝试
等待页面。$eval(“#聊天消息文本”,el=>el.value=text[text])相同的错误…哦,对不起,我忘了输入文本(el,text)的用法,但我告诉过你这是xd的问题
await page.$eval('#chat-message-text', (el, text) => el.value = text, TEXT);