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이 생성되면 크롤러에서 해당 페이지를 인식하지 못하는 현상이 발생한다.
위 코드는 새 탭이나 페이지가 정상적으로 로딩이 되었을때 이벤트를 통해 새 탭의 상태를 파악할 수 있다.
'Javascript > Node.js' 카테고리의 다른 글
Error: listen EACCES: permission denied 해결하기 (0) | 2023.01.03 |
---|---|
Error (amqplib) : Channel closed by server: 406 (PRECONDITION-FAILED) (0) | 2022.04.12 |
Command Pattern - 행위 디자인 패턴 (0) | 2022.02.14 |
Middleware Pattern - 행위 디자인 패턴 (0) | 2022.02.14 |
Iterator Pattern - 행위 디자인 패턴 (0) | 2022.02.14 |
댓글