Google Puppeteer forEach 不是函数
Google Puppeteer forEach is not a function
我有以下功能:
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('http://elgiganten.dk');
await page.setViewport({width: 1920, height: 1200});
await page.type('#main-search', 'El');
await page.keyboard.press('Enter');
await page.waitForSelector('#no-products');
//await page.screenshot({path: 'view.png'});
// execute standard javascript in the context of the page.
await page.addScriptTag({url: 'https://code.jquery.com/jquery-3.2.1.min.js'});
const foundProducts = await page.evaluate(() => {
var products = $('.mini-product-content');
var returnArray = [];
products.forEach(function (product) {
var container = product.find('a');
returnArray.push({
title: container.title
});
});
return products;
});
console.log(foundProducts);
await browser.close();
})();
class '.mini-product-content'
在页面上出现了 14 次。现在你可以看到我试图循环遍历它们但是每当我这样做时我都会收到以下错误:
Error: Evaluation failed: TypeError: products.forEach is not a function
如果我删除它并打印出结果,我会得到以下结果:
{ '0': {},
'1': {},
'2': {},
'3': {},
'4': {},
'5': {},
'6': {},
'7': {},
'8': {},
'9': {},
'10': {},
'11': {},
'12': {},
'13': {},
length: 14,
prevObject:
{ '0':
{ location: [Object],
__satellite__: 2,
SearchForm: [Object],
StoreForm: [Object],
_html5shiv: 1,
jQuery2240488744717004840461: [Object] },
length: 1 } }
以上是使用console.log
所以我的问题是我做错了什么?
您正在尝试遍历 jQuery 列表。您应该将 .forEach()
替换为 jQuery equivalent .each()
.
我有以下功能:
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('http://elgiganten.dk');
await page.setViewport({width: 1920, height: 1200});
await page.type('#main-search', 'El');
await page.keyboard.press('Enter');
await page.waitForSelector('#no-products');
//await page.screenshot({path: 'view.png'});
// execute standard javascript in the context of the page.
await page.addScriptTag({url: 'https://code.jquery.com/jquery-3.2.1.min.js'});
const foundProducts = await page.evaluate(() => {
var products = $('.mini-product-content');
var returnArray = [];
products.forEach(function (product) {
var container = product.find('a');
returnArray.push({
title: container.title
});
});
return products;
});
console.log(foundProducts);
await browser.close();
})();
class '.mini-product-content'
在页面上出现了 14 次。现在你可以看到我试图循环遍历它们但是每当我这样做时我都会收到以下错误:
Error: Evaluation failed: TypeError: products.forEach is not a function
如果我删除它并打印出结果,我会得到以下结果:
{ '0': {},
'1': {},
'2': {},
'3': {},
'4': {},
'5': {},
'6': {},
'7': {},
'8': {},
'9': {},
'10': {},
'11': {},
'12': {},
'13': {},
length: 14,
prevObject:
{ '0':
{ location: [Object],
__satellite__: 2,
SearchForm: [Object],
StoreForm: [Object],
_html5shiv: 1,
jQuery2240488744717004840461: [Object] },
length: 1 } }
以上是使用console.log
所以我的问题是我做错了什么?
您正在尝试遍历 jQuery 列表。您应该将 .forEach()
替换为 jQuery equivalent .each()
.