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

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&ltmpl=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()메소드는 웹 페이지 내에서 임의의 자바스크립트 코드를 수행하는 메소드입니다.

실행을 하면 결과는 다음과 같습니다.




댓글

댓글 쓰기

이 블로그의 인기 게시물

PhantomJs와 CasperJs

CasperJs로 Pixabay 크롤러 만들기