P粉7980104412023-08-17 17:50:42
await page.waitForSelector(".Ip")
只返回一个元素,而不是一个数组,所以无法循环遍历。应该有一个清晰的错误消息来解释这个问题。相反,可以使用page.$$eval
(或者如果你想尝试最新的定位器 API)来提取数据。
const puppeteer = require("puppeteer"); // ^21.0.2 const url = ""; let browser; (async () => { browser = await puppeteer.launch(); const [page] = await browser.pages(); await page.setViewport({width: 1000, height: 926}); await page.goto(url, {waitUntil: "domcontentloaded"}); // not really necessary const button = await page.waitForSelector("#onetrust-accept-btn-handler"); await button.click(); await page.waitForSelector(".Ip"); const content = await page.$$eval(".Ip", els => els.map(e => { const text = id => e.querySelector(`[id*=${id}]`).textContent.trim(); return { time: text("status-or-time"), home: text("home-team-name"), away: text("away-team-name"), homeTeamScore: +text("home-team-score"), awaitTeamScore: +text("away-team-score"), }; }) ); console.log(content); })() .catch(err => console.error(err)) .finally(() => browser?.close());
注:
waitForSelector
的返回值。它保证是该元素,否则如果在规定时间内找不到它,它会抛出异常。await elements[i].$(".Ip")
不会帮助你访问任何内容,因为在你已经持有的.Ip
元素内部没有.Ip
。