현재 모종의 이유로 특정 사이트의 정보를 참고해야하는 사항이 생겼는데, 여러 tools을 알아보던중
이전에 써봤던 puppeteer가 만만해서 사용해봤다.
cypress나 playwright, selenium 등 여러 툴들이 있긴한데 사실 cypress, playwright는 테스트용도로 쓰는 툴이지...
이런 용도로 보긴 좀 어렵고 물론 쓸 수는 있긴하지만.. selenium은 구관이 명관이지만 이것도 오래됐지 ㅋㅋ

결론은 puppeteer 로 ㅋㅋ
이전에도 잠깐 정리한적은 있지만, node library 로 npm으로 간략히 설치해서 사용할 수 있는 막강한 툴이다.
Puppeteer
Puppeteer 란Puppetheer는 DevTools Protocol을 통해 Chrome/Chromium을 제어하는 API를 제공하는 Node.js Library 설치npm i puppeteer or yarn add puppeteerPuppeteer-core도 있지만, puppeteer-core는 내부 Chrome을 사용해야 함으로,
19880811.tistory.com
또한 puppeteer와 puppeteer-core 두가지로 나뉘며, 간단하게 설명하면 puppeteer-core는 puppeteer의 경량 버전으로
실행 환경에 설치되어있는 chromium을 이용하게 할 수 있다.
async function crawling() {
const browser = await puppeteer.launch();
const page = await browser.newPage();
try {
await page.goto(`${url}`, {
timeout: 600000,
waitUntil: "networkidle0"
});
const data = await page.evaluate(async () => {
const title = document.querySelector('.layer_title')?.innerText;
return rawData;
});
if (data.length === 0) return null;
return data;
} catch (error) {
console.error('An error occurred during the crawler:', error);
} finally {
await browser.close();
}
};
export { crawling };
간단하게 예제 인데 evaluate는 주로 접속 한 웹에서 JavaScript 코드를 실행하여 웹 페이지의 DOM 요소에 접근하고 조작할 때 사용한다.
Page.evaluate() method | Puppeteer
Evaluates a function in the page's context and returns the result.
pptr.dev
evaluate 에 인자를 전달할 수 있으며 crawling에서 사용하던 데이터를 evaluate안에서 사용 할 수 있게 끔 할 수 있다.
const title = await page.evaluate((arg1, arg2) => {
return document.title + ' ' + arg1 + ' ' + arg2;
}, 'argument1', 'argument2');
이밖에 exposeFunction등 다양한 함수를 써봐서 재밌었음
참고로 robots.txt와 이용약관 보고 크롤링이 가능한지 먼저 확인을 해보고 가능하면 하자.
철컹철컹은 무섭다
'Programming > puppeteer' 카테고리의 다른 글
exposeFunction (0) | 2024.07.09 |
---|---|
Puppeteer (0) | 2023.08.13 |