PhantomJS로 Blogger댓글 조회 프로그램 작성하기

Jpub의 <자바스크립트와 Node.js를 이용한 웹 크롤링 테크닉>이란 책의 소스코드를 참고했습니다.
책을 읽던 중 티스토리 관리 페이지에 로그인해서 새 댓글을 확인하는 프로그램을 만드는 부분을 보게 되었습니다.
그러나 저는 티스토리 초대장이 없는 관계로 책의 소스를 응용해서 Blogger의 새 댓글을 확인하는 프로그램을 만들어 보았습니다.
우선 PhantomJS와 CasperJs를 컴퓨터에 설치해줍니다.
npm install -g phantomjs
npm install -g casperjs
이 프로그램을 만들 때 가장 먼저 해야하는 작업이 Blogger에 로그인하는 것입니다.
구글 계정으로 로그인되어있지 않은 상태로 다음 URL로 들어가게 되면 로그인 창이 뜨게 됩니다.
https://accounts.google.com/ServiceLogin/identifier?hl=ko&passive=true&service=blogger<mpl=blogger&continue=https%3A%2F%2Fwww.blogger.com%2Fhome&flowName=GlifWebSignIn&flowEntry=AddSession
일단 우리의 목표는 저 입력창에 이메일을 입력하는 것입니다.
크롬 창에서 F12를 눌러 개발자 모드를 켠 후, Ctrl+Shift+C를 누르고 입력창을 가리키면 입력창의 CSS 선택자 속성이 뜨게 됩니다.
조사해 보니 이메일 input 태그의 name 속성은 identifierId 이고 form 태그의 선택자 속성은 form.RFjuSb.bxPAYd.k6Zj8d 입니다.
지금까지의 코드를 정리해 보겠습니다.
var casper = require('casper').create({ verbose: true, loglevel: 'debug'});
var urlLogin = "구글 로그인 주소";
var id="Your Email";
casper.start();
casper.userAgent('User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Whale/0.9.34.10 Safari/537.36');
casper.open(urlLogin);
casper.then(function () {
casper.fill(".RFjuSb.bxPAYd.k6Zj8d",{
identifier: id //name 속성이 identifier인 input태그에 id변수 값 채우기
}, false);
});
이제 할 일은 '다음' 버튼을 누르는 일입니다. CaseperJs는 마우스 클릭 이벤트를 발생시키는 기능을 지원합니다.
'다음' 버튼의 선택자 속성은 div.ZFr60d.CeoRYc 이므로 다음과 같은 코드를 짤 수 있습니다.
casper.then(function () {
var path = "div.ZFr60d.CeoRYc";
if (casper.exists(path)) { //객체가 존재한다면
casper.mouseEvent('click', path); //누르기
}
casper.wait(3600); //페이지가 로딩될 때까지 기다리기
});
여기서 3600의 딜레이를 주는 이유는 페이지가 정상적으로 로딩될때까지의 시간을 주는 것입니다.
같은 방식으로 패스워드 input 태그의 name 속성을 찾은 후 지금까지의 과정을 반복하면 다음과 같은 코드를 짤 수 있습니다.
var password = "Your_password";
casper.then(function () {
casper.fill(".RFjuSb.bxPAYd.k6Zj8d", {
password: password
}, false);
});
casper.then(function () {
var path = "div.ZFr60d.CeoRYc";
if (casper.exists(path)) {
casper.mouseEvent('click', path);
}
casper.wait(3600);
});
이제 구글 계정으로 로그인이 끝났습니다. 남은 일은 Blogger 관리 페이지의 댓글 세션으로 접속한 후 가장 최근에 달린 댓글을 읽는 일입니다.
다음과 같은 코드로 댓글 목록 페이지를 엽니다.
casper.then(function () {
casper.open('https://www.blogger.com/blogger.g?blogID=' + Your_Blog_Id + '#publishedcomments');
casper.wait(3600);
});
이전과 동일한 방법으로 댓글 목록의 CSS선택자를 분석한 후, 댓글을 콘솔창에 출력합니다.
casper.then(function () {
var getLatestComment = function () {
var a = document.querySelector("div.OYKEW4D-Q-d").innerText;
var b = document.querySelector('div.OYKEW4D-Q-d > a').innerText;
return a.split(b)[0].replace(/\s*$/, "");
}
console.log("새 코멘트: " + this.evaluate(getLatestComment));
});
자바스크립트의 evaluate()메소드는 웹 페이지 내에서 임의의 자바스크립트 코드를 수행하는 메소드입니다.
실행을 하면 결과는 다음과 같습니다.
테스트용 댓글입니다.
답글삭제