강의

멘토링

로드맵

Inflearn Community Q&A

rksidksrksi's profile image
rksidksrksi

asked

[Code Camp] Highly concentrated backend course created at boot camp

framePage가 undefined라 진행이 되지 않습니다.

Resolved

Written on

·

388

0

 안녕하세요. puppeteer 크롤링 수업 진행 중 코드를 동일하게 했는데도 오류가 나서 질문을 남깁니다. 강의는 25분경입니다. 제 전체 코드는 아래와 같습니다.

import puppeteer from "puppeteer";

async function startCrawling() {
    const browser = await puppeteer.launch({headless: false});
    const page = await browser.newPage();
    await page.setViewport({width: 720, height: 480});
    await page.goto("https://finance.naver.com/item/sise.naver?code=005930");
    await new Promise((page) => setTimeout(page, 1000)); // 브라우저 로딩 대기

    for (let i = 0; i < page.frames().length; i++)
        console.log(page.frames()[i].url().includes("/item/sise_day.naver?code=005930"));
    const framePage = await page.frames().find((el) => {el.url().includes("/item/sise_day.naver?code=005930")});

    for (let i = 3; i <= 7; i++) {
        const date = await framePage.$eval(
            `body > table.type2 > tbody > tr:nth-child(${i}) > td:nth-child(1) > span`,
            el => el.textContent);

        const price = await framePage.$eval(`body > table.type2 > tbody > tr:nth-child(${i}) > td:nth-child(2) > span`,
            el => el.textContent);

        console.log(`날짜: ${date}, 가격: ${price}`);
    }

    await browser.close();
};

startCrawling();

위 코드 실행 시 framePage가 undefined로 정의되어 $eval 함수가 실행이 되지 않습니다.

그래서 혹시 frame 중에 일치하는 것이 없어서인가 싶어서 아래 코드로 콘솔에 찍어보았습니다만, true가 나오는 걸로 보아 문제가 없어야 하는것이 맞았습니다.

for (let i = 0; i < page.frames().length; i++)
    console.log(page.frames()[i].url().includes("/item/sise_day.naver?code=005930"));

/* 결과 값은
false
false
...(중략)...
true
false
false
*/

 

왜 undefined가 나오는지 알 수 있을까요?

javascriptexpressnodejsdockertddrest-apiNestJS

Answer 1

1

안녕하세요. ZZAMBA님

const framePage = await page.frames().find((el) => {
    el.url().includes('/item/sise_day.naver?code=005930');
  });

화살표 함수 사용 시, 중괄호를 사용하였는데 return 값이 반환되지 않아 다음 로직들이 실행되지 않은 것으로 확인됩니다.

추가적으로 궁금한 점이 있으시다면 아래 링크를 참고해 학습해 보시길 바랍니다. 감사합니다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Functions/Arrow_functions

ZZAMBA님의 프로필 이미지
ZZAMBA
Questioner

감사합니다. 다음 질문부터는 코드 확인을 제대로 한 뒤에 질문글을 올리겠습니다.

rksidksrksi's profile image
rksidksrksi

asked

Ask a question