Javascript/Node.js
Puppeteer 새 창 인식
v8rus
2024. 2. 7. 09:13
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이 생성되면 크롤러에서 해당 페이지를 인식하지 못하는 현상이 발생한다.
위 코드는 새 탭이나 페이지가 정상적으로 로딩이 되었을때 이벤트를 통해 새 탭의 상태를 파악할 수 있다.