Pupeteer - 错误:评估失败:ReferenceError:TABLE_ROW_SELECTOR 未定义

use*_*629 2 javascript node.js visual-studio-code puppeteer

在此输入图像描述

\n\n

我正在开始使用 pupeteer 和 node 并使用 vscode。我正在尝试登录网站并抓取表格。到目前为止我有:

\n\n
(async () => {\n\nconst browser = await puppeteer.launch({\n  headless: false,\n});\nvar page = await browser.newPage();\nawait page.goto(\'thesite.com/login/\');\n\nawait page.click(USERNAME_SELECTOR);\n\nawait page.keyboard.type(CREDS.username);\n\nawait page.click(PASSWORD_SELECTOR);\nawait page.keyboard.type(CREDS.password);\n\nawait page.click(BUTTON_SELECTOR);\nawait page.waitForNavigation();\n\nconst TABLE_ROW_SELECTOR = \'.gv-container.gv-container-133 > table > tbody\';\nawait page.waitForSelector(TABLE_ROW_SELECTOR);\n\nawait page.waitForSelector(TABLE_ROW_SELECTOR);\n\n\nawait page.screenshot({ path: \'example.png\' });  \nconst data = await page.evaluate(() => document.querySelectorAll(TABLE_ROW_SELECTOR));\n\n\n\n\nawait browser.close();\n})();\n
Run Code Online (Sandbox Code Playgroud)\n\n

这主要是有效的。该脚本似乎执行到:

\n\n
const data = await page.evaluate(() => document.querySelectorAll(TABLE_ROW_SELECTOR));\n
Run Code Online (Sandbox Code Playgroud)\n\n

它在标题中给出了错误。上面的屏幕截图没有显示屏幕截图位置下方的表格。当我进入

\n\n
document.querySelectorAll(TABLE_ROW_SELECTOR));\n
Run Code Online (Sandbox Code Playgroud)\n\n

进入 devtools 控制台,我得到了预期的 html。我究竟做错了什么?

\n\n

编辑:

\n\n

在我的控制台中,我看到一个对象列表,但据我所知,没有任何值。这是第一个对象

\n\n
0:Object {}\n__proto__:Object {constructor: , __defineGetter__: , __defineSetter__: , \xe2\x80\xa6}\n__defineGetter__:function __defineGetter__() { \xe2\x80\xa6 }\n__defineSetter__:function __defineSetter__() { \xe2\x80\xa6 }\n__lookupGetter__:function __lookupGetter__() { \xe2\x80\xa6 }\n__lookupSetter__:function __lookupSetter__() { \xe2\x80\xa6 }\nconstructor:function Object() { \xe2\x80\xa6 }\nhasOwnProperty:function hasOwnProperty() { \xe2\x80\xa6 }\nNo debug adapter, can not send \'variables\'\nisPrototypeOf:function isPrototypeOf() { \xe2\x80\xa6 }\nNo debug adapter, can not send \'variables\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

“没有调试适配器,无法发送\'变量\'”是什么意思?

\n

vse*_*byt 5

的函数参数page.evaluate()在文档(浏览器)上下文中执行,并且无法访问 Node.js 脚本的变量。您需要按值传输这些变量:

const data = await page.evaluate(SELECTOR => document.querySelectorAll(SELECTOR), TABLE_ROW_SELECTOR);
Run Code Online (Sandbox Code Playgroud)