Puppeteer#
Puppeteer는 Google에서 개발한 Node.js 라이브러리로, 프로그래밍을 통해 Chrome 또는 Chromium 브라우저를 제어할 수 있게 해주는 고급 웹 자동화 도구.
기본적으로 헤드리스 모드로 실행되지만, 필요에 따라 전체 브라우저 인터페이스를 표시할 수도 있다.
Puppeteer는 브라우저 자동화의 복잡성을 추상화하여 개발자가 더 쉽고 효율적으로 웹 상호작용을 프로그래밍할 수 있도록 설계되었다.
브라우저의 모든 기능을 프로그래밍적으로 제어할 수 있게 함으로써, 테스팅, 웹 스크래핑, PDF 생성 등 다양한 use case를 지원한다.
주요 특징#
포괄적인 브라우저 제어:
Puppeteer는 다음과 같은 고급 브라우저 제어 기능을 제공한다:
- 페이지 탐색 및 상호작용
- 자바스크립트 실행
- 네트워크 요청 모니터링
- 브라우저 이벤트 캡처
- 스크린샷 및 PDF 생성
고급 자동화 기능:
- 동적 웹페이지 렌더링 지원
- 완벽한 비동기 API
- 확장 가능한 플러그인 아키텍처
- 완벽한 Chrome/Chromium 통합
- 강력한 웹 스크래핑 기능
- 높은 성능과 안정성
- 풍부한 API와 유연성
- 자동화 테스팅에 최적화
단점 및 한계#
- Chrome/Chromium에 제한됨
- 초기 학습 곡선이 가파름
- 리소스 집약적일 수 있음
- 고급 브라우저 자동화에 복잡성
설치 및 기본 설정#
Npm을 통한 설치
기본 설정 예시
1
2
3
4
5
6
7
8
9
10
11
12
| const puppeteer = require('puppeteer');
(async () => {
// 브라우저 실행 옵션
const browser = await puppeteer.launch({
headless: true, // 헤드리스 모드
defaultViewport: {
width: 1920,
height: 1080
}
});
})();
|
주요 사용 방법 및 예시#
주요 명령어#
- puppeteer.launch(): 브라우저 인스턴스 생성
- browser.newPage(): 새 페이지 생성
- page.goto(url): 지정된 URL로 이동
- page.click(selector): 요소 클릭
- page.type(selector, text): 텍스트 입력
- page.screenshot(): 스크린샷 캡처
- page.pdf(): PDF 생성
- page.evaluate(): 페이지 컨텍스트에서 JavaScript 실행
기본 웹 페이지 탐색#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// 웹사이트 방문
await page.goto('https://example.com');
// 페이지 제목 추출
const title = await page.title();
console.log(title);
await browser.close();
})();
|
스크린샷 및 PDF 생성#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
// 전체 페이지 스크린샷
await page.screenshot({ path: 'page.png', fullPage: true });
// PDF 생성
await page.pdf({ path: 'page.pdf', format: 'A4' });
await browser.close();
})();
|
웹 스크래핑#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://news.example.com');
// 데이터 추출
const articles = await page.evaluate(() => {
const titles = document.querySelectorAll('.article-title');
return Array.from(titles).map(title => title.textContent);
});
console.log(articles);
await browser.close();
})();
|
자동화된 폼 제출#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://login.example.com');
// 로그인 폼 자동 입력
await page.type('#username', 'user@example.com');
await page.type('#password', 'secretpassword');
// 폼 제출
await page.click('#submit-button');
// 로그인 후 페이지 대기
await page.waitForNavigation();
await browser.close();
})();
|
CLI 및 고급 명령어#
1
2
3
4
5
| # Puppeteer를 이용한 스크립트 실행
node script.js
# 디버깅 모드
DEBUG=puppeteer node script.js
|
참고 및 출처#
Puppeteer | Puppeteer