구글에서 만든 노드 라이브러리로 Headless Chrime 또는 Chrominum을 제어할 수 있다.
백그라운드에서 실행되는 크롬 브라우저 + CDP(Chrome Devtool Protocol)이 베이스로 깔려있어 강력한 UI 테스트 도구로 볼 수 있다.
백그라운드에서(CLI) 작동하는 브라우저
때문에 일반 사용자가 브라우저를 사용할 때처럼 화면이 시각적으로 보이지 않는다.
보이는 화면은 없지만,일반적인 브라우저와 같이 웹페이지에 접속하여 HTML, CSS 으로 DOM Tree 와 CSSOM Tree 를 만들고, JS 엔진을 구동한다.
puppeteer에서는 옵션 설정을 통해 headless 모드와 non-headless 모드 둘다 사용할 수 있다.
const browser = await puppetter.launch({headless: false}) // default = true
유일한 차이점은 만든 화면을 사용자에게 보여주지 않는다는 점이다.
일반 브라우저와 큰 차이가 없기 때문에 보여주는 화면이 없이도, 화면 테스트나 스크린샷을 찍는 것 등 다양한 기능 동작이 가능하며, 사용자가 실제 사용하는 환경과 비슷하게 테스트가 가능하다.
<구조>

Puppteer API는 계층적인 구조로 구성되어 있고, 실제 브라우저 구성 요소처럼 되어있다.
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
await page.screenshot({path: 'example.png'});
await browser.close();
})();
https://example.com로 이동하여 스크린샷을 example.png로 저장하는 코드
대부분의 메소드들은 Promise를 반환한다.
puppeteer.lanch(): browser 생성
browser.newPage(): 새로운 페이지를 생성, 생성된 페이지로 실제 페이지를 조작 및 제어
page.goto(): 페이지 이동
page.screenshot(): 페이지의 스크린샷을 찍어 특정 path에 저장
이외 브라우저 공식문서 참고하기
https://pptr.dev/api/puppeteer.browser