[Puppeteer] 퍼펫티어를 이용한 CRAWLING 작업[Puppeteer] 퍼펫티어를 이용한 CRAWLING 작업
Posted at 2019. 4. 26. 16:27 | Posted in Node.js/Puppeteer■ 퍼펫티어를 이용한 크롤링 작업
필자가 노드를 처음 접하게된 이유는 급작스러운 크롤링 작업 때문이었다.
당시에는 PhantomJS와 CasperJS를 통해 작업을 진행 하였고,
왠만학 작업은 위 두개를 가지고 어떻게든 진행 할 수 있었지만.
점점 작업해야하는 프로젝트가 고도화 됨에 따라,
다른 Node.js와의 라이브러리 범용이 어려운 CasperJS의 한계를 느끼게 되었고
Puppeteer를 주로 사용하게 되었다.
Node.js를 통한 크롤링 작업을 준비중인 사람이라면,
그만 퍼펫티어를 더 활용하는것이 스트레스를 덜 받을 것이라고 생각한다.
# 소스 코드
puppeteer_login.js |
const puppeteer = require("puppeteer"); // 사용시 인위적인 딜레이를 주기위한 함수 function delay( timeout ) { return new Promise(( resolve ) => { setTimeout( resolve, timeout ); }); } puppeteer.launch({ headless : false // 헤드리스모드의 사용여부를 묻는다. , devtools : true // 개발자 모드의 사용여부를 묻는다. }).then(async browser => { const page = await browser.newPage();
// 로그인할 티스토리 블로그의 관리자 페이지를 지정 await page.goto( "http://magic.wickedmiso.com/manage/", { waitUntil : "networkidle2" } );
// 티스토리의 아이디와 암호를 입력한다. await page.type( "div.box_login > div.inp_text:nth-child(1) > input#loginId", "티스토리 아이디" ); await page.type( "div.box_login > div.inp_text:nth-child(2) > input#loginPw", "티스토리 패스워드" ); /* document.getElementByI로 직접 입력할 input BOX를 선택하여 작업하는 것도 가능하다. await page.evaluate(() => { document.getElementById( "div.box_login > div.inp_text:nth-child(1) > input#loginId" ).value = "티스토리 아이디"; document.getElementById( "div.box_login > div.inp_text:nth-child(2) > input#loginPw" ).value = "티스토리 패스워드"; }); */ await delay(3000);
// 로그인 SUBMIT 기능 const elementHandle = await page.waitFor( "input" ); await elementHandle.press( "Enter" );
await delay(5000);
/* 로그인이후 방문 기록 데이터를 콘솔에 띄워본다. */ const emToDay = await page.waitFor( "div.box_blog > dl.count_visitor:nth-child(1) > dd" ); const txtToDay = await page.evaluate( emToDay => emToDay.textContent, emToDay ); console.log("-. 오늘 방문자 수", txtToDay);
const emYesterDay = await page.waitFor( "div.box_blog > dl.count_visitor:nth-child(2) > dd" ); const txtYesterDay = await page.evaluate( emYesterDay => emYesterDay.textContent, emYesterDay ); console.log("-. 어제 방문자 수", txtYesterDay); const emCumulativ = await page.waitFor( "div.box_blog > dl.count_visitor:nth-child(3) > dd" ); const txtCumulativ = await page.evaluate( emCumulativ => emCumulativ.textContent, emCumulativ ); console.log("-. 누적 방문자 수", txtCumulativ); }); |
# 노드 실행
C:> node puppeteer_login.js |
# 출력 결과
'Node.js > Puppeteer' 카테고리의 다른 글
[Puppeteer] Cheerio 모듈을 활용한 데이터 스크랩핑 (0) | 2019.06.20 |
---|---|
[Puppeteer] 페이지 클릭 및 입력 이벤트 (0) | 2019.05.10 |
[Puppeteer] 퍼펫티어에서 크롬 확장프로그램 사용하기 (2) | 2019.04.30 |
[Puppeteer] 퍼펫티어의 브라우저를 크롬으로 변경하기 (1) | 2019.04.29 |
[Puppeteer] 퍼펫티어 설치 및 설정하기 (1) | 2019.04.23 |