node.js - 错误:评估失败:ReferenceError:_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default 未定义
问题描述
当我尝试运行脚本(使用 webpack)时出现此错误
Error: Evaluation failed: ReferenceError: _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default is not defined at __puppeteer_evaluation_script__:2:27
但是当我运行不使用 webpack 的相同代码时,我得到了预期的结果。
这是我的功能。
const getMeenaClickProducts = async (title) => {
const url = ` ${MEENACLICK}/${title}`;
console.log({ url });
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
await page.goto(url);
await page.waitForSelector('.ant-pagination-total-text');
const products = await page.evaluate(() => {
const cards = [...document.querySelectorAll('.card-thumb')];
console.log({ cards });
return cards.map((card) => {
const productTitle = card.querySelector('.title').innerText;
const priceElement = card.querySelector('.reg-price');
const price = priceElement ? priceElement.innerText : '';
const image = card.querySelector('.img').src;
const link = card.querySelector('.main-link').href;
return {
title: productTitle,
price,
image,
link,
};
});
});
await browser.close();
const filteredProducts = products
.filter((product) =>
product.title.toLowerCase().includes(title.toLowerCase())
)
.filter((item) => item.price);
return filteredProducts;
};
可能是什么原因?
解决方案
问题出在 Babel 和这部分:
const products = await page.evaluate(() => {
const cards = [...document.querySelectorAll('.card-thumb')];
console.log({ cards });
return cards.map((card) => {
const productTitle = card.querySelector('.title').innerText;
const priceElement = card.querySelector('.reg-price');
const price = priceElement ? priceElement.innerText : '';
const image = card.querySelector('.img').src;
const link = card.querySelector('.main-link').href;
return {
title: productTitle,
price,
image,
link,
};
});
});
page.evaluate()
您作为函数参数传递的脚本内部并不是传递给页面实例的实际代码,因为首先您使用 babel 对其进行转换。您在这部分中拥有的数组扩展运算符:
const cards = [...document.querySelectorAll('.card-thumb')];
很可能在您build
的函数中被转换为名为 的函数_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default
,然后将其传递给 puppeteerpage
上下文,并最终在该页面中执行。但是这样的函数没有在那个上下文中定义,这就是你得到一个 ReferenceError 的原因。
一些修复它的选项:
- 不要将扩展运算符与您正在使用的当前 babel 配置结合使用,因此转换后的构建不包括它的填充/替换。考虑具有等效效果的替换,例如:
const cards = Array.from(document.querySelectorAll('.card-thumb'));
或者更传统的for
/forEach()
循环并自己构建数组将完成工作。
- 更新您的 babel 配置/目标语言级别以原生支持扩展运算符。
推荐阅读
- python - Discord.py:获取带有 id 的用户对象
- javascript - 如果函数是 JS 中的对象,我们可以在函数内部有方法吗?如果是这样,如何称呼他们?
- php - 在 PHP 中搜索和替换给定模式中的字符串
- javascript - 为什么chartJs会抛出未定义的长度,尽管一切似乎都是正确的
- python - 为什么 Beautifulsoup 中的 select_one 函数返回 None 值
- php - 我只想列出音乐。我怎样才能在颤振上做到这一点?
- azure - 在 Azure Monitor 工作簿中针对资源管理器创建查询时出现错误消息
- javascript - 更改 onChangeText 后无法在输入字段中输入
- powershell - 运行 Azure Functions 应用时出现间歇性错误消息
- node.js - OrderBy 和 StartAt 具有两个不同的字段 firestore