실시간 축구 정보를 위한 웹사이트를 크롤링하기 위해 node.js와 puppeteer를 사용하려고 하는데 console.log("trying to select team element") 후에 브라우저가 즉시 닫힙니다.
const puppeteer = require("puppeteer"); 비동기 함수 openPage() { const browser = wait puppeteer.launch( {headless: true} ); const 페이지 = browser.newPage()를 기다립니다; wait page.setViewport({ 너비: 1000, 높이: 926 }); page.goto("https://www.livescore.com/en/")를 기다립니다. //쿠키 허용 const 버튼 = 대기 page.waitForSelector('#onetrust-accept-btn-handler'); if (버튼) { 버튼을 기다립니다.click(); console.log("쿠키 버튼을 클릭했습니다."); }; 페이지 복귀; } 비동기 함수 scrapeData(페이지) { 내용 = []; // 경쟁 요소를 가져옵니다. 요소 = 대기 page.waitForSelector(".Ip") console.log("팀 요소를 선택하려고 합니다.") for (let i=0; i < elements.length; i++) { let homeTeamElement = 요소[i].$(".Ip")를 기다립니다. if (homeTeamElement) { const homeTeamText = homeTeamElement.evaluate(node => node.textContent)를 기다립니다. content.push(homeTeamText); } }; 콘텐츠 반환; }; (비동기 () => { const 페이지 = openPage()를 기다립니다; const dataScraped = scrapeData(페이지)를 기다립니다. console.log(데이터 스크랩) page.browser().close()를 기다립니다. })();
이러한 이유에 대한 아이디어와 내 코드에 대한 추가 비판을 환영합니다!
으아악await page.waitForSelector(".Ip")
只返回一个元素,而不是一个数组,所以无法循环遍历。应该有一个清晰的错误消息来解释这个问题。相反,可以使用page.$$eval
(또는 최신Locator API을 사용하려는 경우) 데이터를 추출하세요.참고:
waitForSelector
반환 값을 확인할 필요가 없습니다. 요소임이 보장됩니다. 그렇지 않으면 지정된 시간 내에 발견되지 않으면 예외가 발생합니다.await elements[i].$(".Ip")
不会帮助你访问任何内容,因为在你已经持有的.Ip
元素内部没有.Ip
.