按名称和属性抓取元素,然后打印它们-Puppeteer



我对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')

相关内容

最新更新