我对Puppeter、node.js和编程完全陌生,我脑海中有这个项目。有一个游戏网站,你可以发布你的物品出售。我想把这个页面刮下来,打印出所有带有名称和属性的项目,但不知道如何访问它们。
网站代码如下所示。
红线是我想打印出来的。我试着至少得到项目的名称,但我得到的只是一个空数组:
const itemNames = await page.evaluate(() =>
Array.from(document.getElementsByClassName('itemHeader doubleLine'))
.map((partner) => partner.innerText.trim())
)
console.log(itemNames);
await browser.close();
如何使用Puppeteer完成此任务?谢谢你的帮助。
您可以使用page.$$eval
来获取匹配元素:
page.$$eval(selector, pageFunction[, arg])
此方法在页面中运行
Array.from(document.querySelectorAll(selector))
,并将其作为第一个参数传递给pageFunction
。
然后,您可以使用Array.map
迭代匹配元素的数组,以检索它们的innerText属性。
例如:
await page.waitForSelector('.itemHeader.doubleLine')
const items = await page.$$eval('.itemHeader.doubleLine', itemElements => itemElements.map(i => i.innerText.trim()))
输出:
["Damnation StridenHydrascale Boots","Corruption SpannCarnal Boots","Rift SpannShagreen Boots","Storm TreadnGoliath Greaves","Maelström UrgenStrapped Boots","Maelström TreadnIronscale Boots","Beast HoofnCarnal Boots","Ambush RoadnShackled Boots","Miracle TracknVelvet Slippers","Brood LeaguenLeatherscale Boots"]
编辑
事实上,你的解决方案也是正确的。我敢肯定,在你的案件中缺少的是page.waitForSelector
。在DOM中呈现内容之前,您定义了itemNames
。
await page.waitForSelector('.itemHeader.doubleLine')