木偶操纵者奇怪的范围行为
Puppeteer weird scope behavior
我正在尝试使用 puppeteer 自动填写表格,但它一直抛出 ReferenceError: text is not defined
,即使它在 1 行之前定义并且 console.log
成功显示它。
这是抛出错误的行:
await page.$eval('#chat-message-text', el => el.value = text);
如果我用 el.value = 'blablabla'
之类的东西填充它,它会很好用。
最奇怪的是 console.log(text);
也运行良好,然后它抛出错误。
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.
await page.$eval('#chat-message-text', (el, text) => el.value = text, TEXT);
我正在尝试使用 puppeteer 自动填写表格,但它一直抛出 ReferenceError: text is not defined
,即使它在 1 行之前定义并且 console.log
成功显示它。
这是抛出错误的行:
await page.$eval('#chat-message-text', el => el.value = text);
如果我用 el.value = 'blablabla'
之类的东西填充它,它会很好用。
最奇怪的是 console.log(text);
也运行良好,然后它抛出错误。
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.
await page.$eval('#chat-message-text', (el, text) => el.value = text, TEXT);