본문으로 바로가기

phantomjs, casperjs를 이용해 facebook login해서 크롤링 하기



phantomjs(팬텀js)란?

handless(핸들리스) 웹브라우저로서 커맨드라인(소스코드)으로 웹브라우저를 실행 시켜서 특정 값을 뽑아내거나 비교할 때 사용한다.

웹 브라우져는 로그인이나 특정 값들을 넣을 때 마우스로 클릭 하거나 탭으로 이동하고 해당 값들을 키보드나 마우스로 넣어주어야 한다.

하지만 데이터를 가지고 오거나 값을 비교하거나 web app을 테스트 할 때는 해당 과정이 반복되어 매번 넣어주기가 어렵기 때문에

이걸 사용한다.


casperjs란?

팬텀 js를 조금 더 세밀하게 컨트롤 할 수 있는 기능들을 묶어놓은 라이브러리이다.



로그인한 페이지를 크롤링 하고 싶을 때 사용하는 방법입니다.

아래 your_id, your_password에 개인 id와 pw를 넣고 사용하시기 바랍니다.


npm을 이용한 라이브러리 설치


npm init

npm install --save casperjs phantomjs



main.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
phantom.casperPath = './node_modules/casperjs';
phantom.injectJs('./node_modules/casperjs/bin/bootstrap.js');
 
var fs = require('fs')
 
var casper = require('casper').create({
    pageSettings: {
        loadImages: false,//The script is much faster when this field is set to false
        loadPlugins: false,
        userAgent: 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'
    }
});
 
//open Facebook
casper.start().thenOpen("https://facebook.com"function() {
    console.log("Facebook website opened");
});
 
//로그인
casper.then(function(){
    console.log("해당 id와 pw로 로그인 합니다.");
    this.evaluate(function(){
        document.getElementById("email").value="your_id";
            document.getElementById("pass").value="your_password";
            document.getElementById("loginbutton").children[0].click();
    });
});
 
//스크린샷 찍고 페이지 저장하기
casper.then(function(){
    console.log("6초 후에 AfterLogin.png 으로 저장됩니다.");
    this.wait(6000function(){
      // After 6 seconds, this callback will be called, and then we will capture:
      this.capture('AfterLogin.png');
      fs.write("./hello.html", this.getHTML(), "w")
    });
});
 
//이미지 주소 받아오기
casper.then(function(){
    var images = this.evaluate(function(){
        var facebookImages = document.getElementsByTagName('img');
        var allSrc = [];
        for(var i = 0; i < facebookImages.length; i++) {
            if(facebookImages[i].height >= 100 && facebookImages[i].width >= 100)
                allSrc.push(facebookImages[i].src);
        }
        return JSON.stringify(allSrc);
    });
    console.log(images);
})
 
casper.run();
 
cs


실행하기

phantomjs main.js



end.




댓글을 달아 주세요

  1. 2018.03.23 11:18

    비밀댓글입니다

  2. 2018.03.23 15:27

    비밀댓글입니다

  3. 2018.03.23 15:37

    비밀댓글입니다

    • BlogIcon KyeongRok Kim 2018.03.23 15:40 신고

      제가 노트북이 한대 있기는 합니다만 훔..

      원격으로는 안해봤는데 이번에 한번 해봐야겠네요. 스카이프로 하던가 해야겠는데요

      oceanfog1@gmail.com여기로 이메일 주시면 연락처를 알려드리겠습니다.

  4. 초보개발자 2018.03.27 12:56 신고

    안녕하세요. 일전에 강의 요청 했다가 한번더 해보고 말씀 드린다고 했었던 사람인데요 ^^;;
    해당 블로그 글로 어찌 어찌 성공은 했는데 캡처 해보니까 화면이 로딩이 다 안되고 캡처가 되더라구요
    해서 웨잇을 5분씩 주고 해봐도 화면이 로딩이 다 안되고 또 모바일 화면으로만 캡처가 되던데 ;;

    놓친게 있을까요? ;;; 소스는 그대로 사용 했습니다 ;;

    • BlogIcon KyeongRok Kim 2018.03.27 12:58 신고

      시간을 길게 설정 했는데도그렇다면.. 글쎄요 저도실행을 해봐야 할 것 같습니다.

      모바일 화면 말고 다른걸로 하고 싶다면 브라우저를 기본값이 아니고 pc버젼의 브라우져로 해주어야 될것 같네요.

  5. 초보개발자 2018.03.27 15:47 신고

    감사합니다 해결 되었어요 !!

  6. 2018.03.29 21:42

    비밀댓글입니다

  7. 이종준 2018.04.26 11:10 신고

    TypeError: undefined is not a constructor (evaluating 'casper.start()') 가 나오던데 뭐가 문제인가요?