1. 프로필 페이지 크롤링

 

  우선 그랑블루 프로필 페이지의 규칙을 살펴봐야 한다.

부계정 no.4

  위 사진처럼 모든 계정들은 ID라는 고유번호를 가진다.

  반드시 8자리인건 아니고, 계정 생성에 따라 증가하는 번호이다.(이유는 모르겠으나 정확히 1씩 증가하지는 않는다)

 

프로필 주소

  그리고 프로필페이지 주소는 보다시피 /#profile/고유번호 로 접근 가능하다.

  

  그럼 간단하게 url로 요청을 보내서, html 문서를 얻고, 이름/랭크 등 필요한 정보를 id/class/tag로 추출하면 끝나는거 아닌가? 와 프로젝트 끝!

 

간단!

  그렇게 생각하고 아주 간단한 테스트 페이지를 만들어 보았다.

명료!

  버튼을 누르면 하드코딩된 URL로 프로필 페이지 연결, HTML정보를 얻고 txt-group1이라는 class를 찾아 class명을 출력하는 테스트이다.(txt-group1이란 위에서 언급한 계정 고유 ID이다)

  Jsoup은 HTML문서의 파싱이 가능하게 해주는 라이브러리이다.

행복회로(불탐)

  그렇게 쉬울리가 없었다.

 

게임엔 로딩이 있다.

  왜 Null이 잡혔는가..하니 페이지 전환 사이의 로딩화면이 문제였다.

  게임이니만큼 데이터 로딩은 필요한데, 데이터 로딩 중엔 로딩창을 띄워주고, 데이터 로딩이 완료되면 해당하는 페이지를 보여주도록 되있는 듯 했다.

  그리고 Jsoup는 connect하자마자 받은 그 로딩창의 html을 좋다고 받아왔고, 로딩창에서 있지도 않은 데이터를 찾으려 하니 당연히 Null을 뱉은것.

 

  그러면 Jsoup을 잘 조작해서 로딩 이후의 페이지를 받아올 수 있는가? 구글신에게 문의해 보도록 하자

  JSoup는 그냥 HTML만 받아올 뿐, 어림도 없는 소리였다.

 

 

2. 셀레니움 설치

 

  하지만 착한 스택-오버플로우 사람들이 다른 방법을 남겨 주었다 (링크)

  selenium이라는 라이브러리로 동적으로 추가되는 요소들에도 접근 가능하다는 것.

  정확히는 요소 상태를 감시하다 등장한 이후에 페이지를 긁으면 된다고 한다.

 

  그렇게 셀레니움 설치부터 다시 시작하게 되었다

 

  블로그 글이 죄다 add external jar로 추가하던데, 프로젝트 그대로 다른 환경에서도 돌려보고 싶으므로 내부에 직접 추가했다. 8Mb정도는..괜찮지 않을까?

 

셀레니움 init

  사용하기 위한 크로미움 드라이버 또한 현재 크롬 버전에 맞춰 설치했다 (링크)

목표 elements가 보일 때까지 대기하는 코드(상상도)

  그렇게 실행해 본 결과

짜잔

  셀레니움은 새로운 브라우저를 키는것처럼 작동하는 방식이라는 걸 알게되었고,

  이 브라우저는 시크릿모드와 같아 로그인 세션같은건 하나도 남아있지 않다는 걸 알게되었다.

 

  그럼 그 로그인부터 하면 되지 않을까?

캡챠

  

  오늘의 2번째 어림도 없는 소리였다.

 

  캡챠를 프로그램으로 뚫을수 있는 방법이 있나....?

  아무튼 오늘은 머리아파졌으므로 그만하기로 했다.

+ Recent posts