본문 바로가기

Node.js/node crawling

puppeteer을 활용해서 스크린샷 찍기, 크롤링하기, pdf 생성하기

https://github.com/puppeteer/puppeteer

 

puppeteer/puppeteer

Headless Chrome Node.js API. Contribute to puppeteer/puppeteer development by creating an account on GitHub.

github.com

폴더에 npm init을 통해 패키지를 생성해준다.

 

그후 npm i puppeteer 을 실행하면 다운이 완료된다 

 

스크린샷 찍기 

const puppeteer = require('puppeteer');

const main = async() => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage(); //새탭을 오픈할떄까지 자동화
    await page.goto('https://google.com'); // 크로미움을 실행하고 새페이지를 만들어서 구글로 이동한다
    await page.screenshot({ path: 'screenshot.png' }); //스크린샷찍기
    await browser.close(); //puppeteer 종료
};
main(); 

해당 node를 실행하면 

 

screenshot.png가 생성이되고 정상적으로 스크린샷을 찍어서 가져온것을 확인할 수 있다.

 

 

 

 

크롤링하기 

 

const puppeteer = require('puppeteer');
const fs = require('fs');

const main = async() => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('http://www.cgv.co.kr/movies/', {
        waitUntil: 'networkidle2',
    }); //waitUntil을 통해 언제까지 기다릴지 설정
    await page.waitFor(6000); //로드타임을 위해 waitFor
    const html = await page.content();
    fs.writeFileSync('example.html', html); //example.html
    await browser.close();
};

main();

이 짧은 코드를 실행하면 

 

 

 

전부 다 담아와서 

 

 

똑같이 크롤링해온다.

 

소름이었던건 java에서 jsoup을 활용해서 크롤링했을때랑 다르게 너무나도 쉽고 간단하게 모든 컨텐츠들을 복사해온다는 점이었다. (크롬..당신은..대체)

 

 

pdf만들기 

 

 

해당 puppeteer은 해당 홈페이지를 그대로 pdf로 만들어 저장도 해준다.

const puppeteer = require('puppeteer');

const main = async() => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://google.com', { waitUntil: 'networkidle2' });
    await page.pdf({ path: 'test.pdf', format: 'A4' });
    await browser.close();
};

main();

 

test.pdf