본문 바로가기

Node.js/node crawling

노드 크롤링 - puppeteer 사용해보기

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

 

puppeteer은 Chromium을 제어해주는 라이브러리로써 

Node에서 크롤링을 할때 많이 활용한다.

 

 


const puppeteer = require("puppeteer");

const crawler = async () => {
    //브라우저를 띄우고
    const browser = await puppeteer.launch({headless: false});
    // 페이지를 띄우고
    const page = await browser.newPage();
    const page2 = await browser.newPage();
    const page3 = await browser.newPage();
    // 페이지 이동 
    await page.goto('https://www.naver.com');
    await page2.goto('https://www.google.com');
    await page3.goto('https://www.daum.net');
    //3초정도 대기하다
    await page.waitFor(3000);
    await page2.waitFor(1000);
    await page3.waitFor(1000);
    //페이지를 종료하고
    await page.close();
    await page2.close();
    await page3.close();
    //브라우저를 종료한다 
    await browser.close();
}

crawler();

 

Promise.all을 활용해서 리팩토링을 진행하였다.

 


const puppeteer = require("puppeteer");


const crawler = async () => {
  //브라우저를 띄우고
  const browser = await puppeteer.launch({ headless: false });
  // 페이지를 띄우고

  const [page, page2, page3] = await Promise.all([
    browser.newPage(),
    browser.newPage(),
    browser.newPage(),
  ]);

  // 페이지 이동
  await Promise.all([
    page.goto("https://www.naver.com"),
    page2.goto("https://www.google.com"),
    page3.goto("https://www.daum.net"),
  ]);
  await Promise.all([
    page.waitFor(3000),
    page2.waitFor(1000),
    page3.waitFor(1000),
  ]);
  console.log("working");
  //3초정도 대기하다

  //페이지를 종료하고
  await page.close();
  await page2.close();
  await page3.close();
  //브라우저를 종료한다
  await browser.close();
};

crawler();

 

 

해당 크롤러를 실행하면 

 

이렇게 자동화된 테스트소프트웨어로 제어를 해준다