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
。