구글 크롬의 DevTools Protocol을 통해 Chrome 혹은 Chromium을 제어하기 위한 API를 제공한다. 참고로 Google Chrome 개발 팀에서 직접 개발했다고 한다.
구조는 아래와 같다. 간단하게 하나만 설명하면,
나머지 구조도 아래에서 볼 수 있듯 계층적으로 이뤄진다.
보통 Puppeteer로 가져온 데이터를 파싱할 때 cheerio(https://github.com/cheeriojs/cheerio)를 많이 사용한다.
Headless Browser로 작동(그러나, 브라우저를 띄울 수도 있다)
UI 없이 간편하게 백그라운드에서 실행되는 브라우저로, 특정 페이지에 접속하고 렌더링되는 과정 이후 코드를 수행할 때 용이하다. (참고로 puppeteer를 설치할 때 Chromium도 같이 깔리기 때문에 가능하다고 한다. puppeteer-core는 Chromium 제외)
⇒ 그냥 화면을 보여주지 않고 똑같은 동작을 한다고 생각하면 된다.
넓은 제어폭
마우스, 키보드 뿐 아니라 브라우저 스크린 크키, 쿠키 및 세션 스토리지, 서비스 워커까지 제어가 가능하다고 한다.
// Youtube에서 검색한 결과 가져오기
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://youtube.com');
await page.waitForSelector('input[id="search"]');
await setCookies(page);
const input = await page.$('input[id="search"]');
await input.click();
// Search 창에 입력
await input.type(keyword);
// 엔터 키 누름
await page.keyboard.press('Enter');
await page.waitForSelector('ytd-video-renderer,ytd-grid-video-renderer');
const html = await page.content();
browser.close();
Chrome, Chromium만 지원한다고 한다.
[Node.js] HTTP 요청 관련 라이브러리들(request vs axios vs superagent) (1) | 2021.01.19 |
---|---|
Express.js를 처음 접할 때, 알면 좋을 개념 3가지 (1) | 2018.07.25 |
댓글 영역