puppeteer 기본 예제 및 기본 함수

이태혁·2020년 9월 17일
0
const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({headless: false}); // default is true
  const page = await browser.newPage();
  await page.goto('https://news.ycombinator.com', {waitUntil: 'networkidle2'});
  await page.pdf({path: 'hn.pdf', format: 'A4'});

  await browser.close();
})();
const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
  const hrefElement = await page.$('a');
  await hrefElement.click();
  // ...
})();
  • page.$()는 document.querySelector()의 역할을 한다.

  • page.$$() 는 document.querySelectorAll()과 같다

  await Promise.all(records.map(async (r, i) => {
    result[i] = r;
    const page = await browser.newPage();
    await page.goto(r[1]);
    const scoreEl = await page.$('.score.score_left .star_score');
    if (scoreEl) {
      const text = await page.evaluate(element => element.textContent, scoreEl);
      console.log(r[0], '평점', text.trim());
      result[i][2] = text.trim();
    }
    await page.waitFor(3000);
    await page.close();
  }));
  • page.evaluate() 는 태그 핸들러라고 불리는데
    css선택자로 불러온 scoreEl에서 바로 scoreEl.textContent로 가져올 수 없기 때문에 이런 함수를 쓰는듯 하다. 이 때 evaluate안에 인자로는 serializable한 자료형만 올 수 있다.
const parse = require('csv-parse/lib/sync');
const stringify = require('csv-stringify/lib/sync');
const fs = require('fs');
const puppeteer = require('puppeteer');

const csv = fs.readFileSync('csv/data.csv');
const records = parse(csv.toString('utf-8'));

const crawler = async () => {
  const browser = await puppeteer.launch({ headless: false }); // TODO: headless 옵션 의미 알려주기
  const page = await browser.newPage();
  await page.goto(records[0][1]);
  console.log(await page.content());
  await page.close();
  await browser.close();
};
crawler();
  • await page.content(); 하면 page의 html을 다 볼 수 있음
  • await page.waitFor(3000); 3초만큼 동작 기다리기
  • await page.type('#email', process.env.EMAIL);
  • await page.type('#pass', process.env.PASSWORD);
  • await page.hover('#loginbutton');
  • await page.click('#loginbutton');
  • await page.keyboard.press('Escape');
    키보드 키코드
profile
back-end, cloud, docker, web의 관심이 있는 예비개발자입니다.

0개의 댓글