>웹 프론트엔드 >JS 튜토리얼 >Puppeteer에서 요소를 쿼리할 때 `page.evaluate()`가 빈 개체를 반환하는 이유는 무엇입니까?

Puppeteer에서 요소를 쿼리할 때 `page.evaluate()`가 빈 개체를 반환하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-16 04:33:03296검색

Why Does `page.evaluate()` Return Empty Objects When Querying Elements in Puppeteer?

Puppeteer: page.evaluate querySelectorAll 딜레마

Puppeteer에서 page.evaluate() 함수를 사용할 때 일부 사용자에게 다음과 같은 문제가 발생했습니다. 결과적으로 빈 객체의 배열을 받습니다. 이 수수께끼 같은 동작은 평가 함수 내에서 직렬화 가능한 값을 반환해야 하기 때문에 발생합니다.

인기 있는 소셜 뉴스 집계 웹사이트 Reddit에서 제목 요소를 추출하는 것이 목표인 다음 Puppeteer 코드를 고려해 보세요.

const browser = await puppeteer.launch();

const page = await browser.newPage();
await page.goto('https://reddit.com/');

let list = await page.evaluate(() => {
  return Promise.resolve(Array.from(document.querySelectorAll('.title')));
});

console.log(JSON.stringify(list))

await browser.close();

이 코드를 실행하면 문제 설명에 언급된 것과 유사한 빈 개체 배열이 반환될 수 있습니다. 그 이유는 DOM 요소가 JSON으로 직접 직렬화되지 않지만 Puppeteer는 어쨌든 이를 문자열화하려고 시도하기 때문입니다.

이 문제를 해결하려면 코드가 요소에서 원하는 값을 추출하고 반환해야 합니다. JSON 직렬화 가능 형식으로 제공됩니다. 이 경우 제목 요소의 href 속성은 실제 제목 링크를 보유합니다. 이를 얻으려면 코드를 다음과 같이 수정할 수 있습니다.

let links = await this.page.evaluate((sel) => {
        let elements = Array.from(document.querySelectorAll(sel));
        let links = elements.map(element => {
            return element.href
        })
        return links;
    }, sel);

위 내용은 Puppeteer에서 요소를 쿼리할 때 `page.evaluate()`가 빈 개체를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.