본문 바로가기
Javascript/Node.js

Puppeteer 새 창 인식

by v8rus 2024. 2. 7.
async function getNewTab(browser) {
  let resultPromise;

  async function onTargetcreatedHandler(target) {
    if (target.type() === 'page') {
      const newPage = await target.page();

      const newPagePromise = new Promise(y => 
        newPage.once('domcontentloaded', () => y(newPage)));
      
        const isPageLoaded = await newPage.evaluate(() =>
          document.readyState
        );

        // 이벤트 비활성화, 메모리 누수 방지
        browser.off('targetcreated', onTargetcreatedHandler);

        return isPageLoaded.match('complete|interactive')
          ? resultPromise(newPage)
          : resultPromise(newPagePromise);
    };
  };

  return new Promise(resolve => {
    resultPromise = resolve;
    browser.on('targetcreated', onTargetcreatedHandler);
  });

 

 

Puppeteer에서 별도의 탭이나 윈도우에서 DOM이 생성되면 크롤러에서 해당 페이지를 인식하지 못하는 현상이 발생한다.

위 코드는 새 탭이나 페이지가 정상적으로 로딩이 되었을때 이벤트를 통해 새 탭의 상태를 파악할 수 있다.

댓글