기본 콘텐츠로 건너뛰기

Android Auto Naver Login (네이버 자동 로그인) - 2


웹뷰에서 자바 스크립트설정이랑 쿠키도 끝낫으니 이제 요청헤더에 몇몇개의 값을 추가해줘야된다.

나중에 로딩할때

        web.loadUrl(NAVER_LOGIN, extraHeaders);
 
이렇게 포함시켜주면 된다.
일단 요청헤더를 추가하기 위해서 Map<String, String> 형식으로 추가해준다.

        Map<String, String> extraHeaders = new HashMap<String, String>();
        extraHeaders.put("Referer", Config.HEADER_REFERERURI);
        extraHeaders.put("ContentType", Config.HEADER_CONTYPE);
        extraHeaders.put("User-Agent", Config.HEADER_UA);

대충 이렇게 설정해주는데 각각의 값은 다음과 같다. (코드에서 Ctrl + C, Ctrl + V라 좀 깁니다...)

[Class Config]
    public static final String HEADER_CONTYPE = "header_ConType = \"application/x-www-form-urlencoded\";";
    public static final String HEADER_UA = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0";
    public static final String HEADER_REFERERURI = "http://static.nid.naver.com/login.nhn?svc=wme&amp;url=http%3A%2F%2Fwww.naver.com&amp;t=20120425";

이렇게 설정해 주고나면 마지막 작업이기도 하고 가장 중요한 부분이 남앗다.
이제 WebViewClient를 이용해서 자동화를 완성해야된다.

@Override
        public void onPageFinished(WebView v, String url){

일단 WebViewClient 를 상속해서 웹뷰를 정의한 클래스 내부에 클래스를 하나 만들어 준다.

Ex) protected class ViewClient extends WebViewClient

그리고 아래와 같은 함수를 정의해 줘야되는데

        @Override
        public void onPageFinished(WebView v, String url){

이 함수는 간략하게 말하자면페이지의 로딩이 끝낫을 때에 무언가를 하라고 정의할때 사용한다.
이제 js 를 하나 짜야되는데...
String Script = "var id = document.getElementById(\"id\");id.value = \"" + [네이버 ID] + "\";" +
                    "var pw = document.getElementById(\"pw\");pw.value = \"" + [네이버 PASS] + "\";" +
                    "document.getElementById(\"login_chk\").click();" +
                    "var button = document.getElementsByClassName(\"btn_global\");" +
                    "for (var i=0;i<button.length; i++) {\n" +
                    "    button[i].click();\n" +
                    "};";

그냥 이렇게 짜면 된다. 중간에 [네이버 ID] 랑 [네이버 PASS] 에는 네이버 id와 password를 담고있는 String 형 변수를 넣어주거나, 그냥 "" 해서 네이버 id, password를 바로 넣어버려도 된다.

저렇게 스크립트가 완성되면저 스크립트를 웹뷰에서 실행시켜주면 된다.
v.evaluateJavascript(Script, null);

그리고 저걸 실행시키면 로그인이 이제 가능해질텐데 로그인만 하고 다른거 할거면 여기서 그만 봐도 된다 이 아래 내용은 카페를 파싱하는 경우 보면 도움이 될것이다.


자...이제 이 함수를 써야된다. (사실 이거 어떻게 설명할지 모르겟어서 그냥 거의 그대로 들고왔다.)

@Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (!url.contains("cafe")) {
                CookieSyncManager.getInstance().sync();
                view.loadUrl([카페 주소]);
            } else if(url.equals([카페 주소])) {
                CookieSyncManager.getInstance().sync();
                dialog.dismiss();
                process_login.this.startActivity(new Intent(getApplicationContext(), [이동할 엑티비티]));
                process_login.this.finish();
            } else {
                view.loadUrl(url);
            }
            return true;
        }

로그인을 한 뒤 순서를 보면 다음과 같다.
  1. 로그인 끝
  2. url 에 cafe가 포함되지 않은 경우에는 [카페 주소]를 로드
  3. 로드가 되면 CookieSyncManager에 쿠키 동기화
  4. dialog 종료 (넣어둔 경우만 해당)
  5. 할거 다 했으므로 다른 엑티비티로 전환
  6. 웹뷰가 포함된 엑티비티를 종료
그리고 가끔 가다가...네이버에서 로그인 몇번 틀리면 아래 보안코드인가 입력하라고 하는데...이건... 현재 코드에서는 수동으로 해줘야된다 (아직 않넣어둠...)

//2016-08-25 글 수정 : 네이버 로그인 페이지 수정으로 인한 버튼 CSS선택자 수정

댓글

  1. 답글
    1. 안녕하세요. 답글이 늦어져서 죄송합니다
      그 위에서 작성한 js에서의 .int_jogin은 네이버 로그인 페이지에 있는 로그인 버튼에 대한 CSS 선택자입니다.

      삭제
    2. 혹시 몰라서 확인해보니 네이버가 로그인 하는곳을 약간 수정해놨는지 로그인 버튼에 대한 CSS 선택자가 btn_global로 바꿔져 잇네요... 위에 스크립트를 이용해서 네이버 로그인을 하실거면 int_jogin 을 btn_global 로 바꾸셔서 사용하시면 될 것 같습니다.

      삭제
  2. 안녕하세요 저는 컴퓨터/보안 관련 공부를 하고있는 학생입니다. 안드로이드에서 네이버 자동로그인 관련 자료를 검색하던 중 선생님의 블로그를 보게되었습니다. 블로그에 올려주신 코드를 보았을때 중간중간 이해가 잘 되지 않는 부분들이 있어서.. 혹시 코드 공유가 가능할까요? 학습용으로만 사용하겠습니다.

    답글삭제
  3. 안녕하세요 저는 컴퓨터/보안 관련 공부를 하고있는 학생입니다. 안드로이드에서 네이버 자동로그인 관련 자료를 검색하던 중 선생님의 블로그를 보게되었습니다. 블로그에 올려주신 코드를 보았을때 중간중간 이해가 잘 되지 않는 부분들이 있어서.. 혹시 코드 공유가 가능할까요? 학습용으로만 사용하겠습니다.

    답글삭제

댓글 쓰기

이 블로그의 인기 게시물

싱가포르 여행 1일차

난분명 아침에 11시쯤에 바로 밥먹고 공항으로 이동한다는 소리를 들었는데...그전에 과학관으로 끌려가서 급하게 회로 만들어서 전시를 하게 됬다... 다른 학교에서 준비한 회로 급하게 준비한 회로 아쉬운게 이거 기간만 제대로 알앗더라면 좀더 멋들여 지게 만들수 있엇을것 같다... 아무튼다시 과학관에서 학교로 이동한뒤 바로 공항으로 끌려 나가게 되었다.  공항 도착!!!  오오오, 처음와보는 인천 공항...예상이상으로 크고 넓엇다. 예전에 가족여행을 가면서 청주공항은 갓지만 여긴 그 청주공항보다 더 크고 넓다는 느낌이 들었다. 그리고 너무 일찍와서 애들 사진찍고 시간만 때웟다.  비행기 타기전 시간을 계속 때우다가 비행기를 보게 됫는데 멀리서 보니까 은근 작다는 느낌...? 그리고 가까이서 보니 크더라...  비행기 안   운이 좋게도 창문쪽으로 자리가 됬다 어예  비행중  비행 시간이 총 6시간 걸린다고하길레 심심할줄 알았는데 예상외로 노래도 있을건 있고 (없을건 없다) 영화도 않본것들이 들어있어서 그래도 심심하지 않게 온것 같다. 그리고 3번째 사진이 기내식인데 이거 다른거 다 괜찮은데 두부가 왜 들어 있는건지 정말 맛이 없다... (개인적으로...)  도착 일단 도착해서 짐을 찾은 뒤, 유심을 사기위해서 이동을 했다.  유심 구입 10 일동안 100GB에 국제 전화 90분 무료라는데...싱가포르 달러기준으로 30$를 내고 구입했다. 사실상 이거 로밍보다 가성비가 좋은것 같다. 그리고 이거 제일 신기했던게...일반 유심이랑 나노랑 마이크로랑 3단 분리가 된다고 표현해야되나....아무튼 3종류 유심사이즈들을 다 커버해준다...그리고 그다음 버스를타고 숙소로 이동하기 위해서 공항 밖으로 나왔는데 ...

마소 후기

원래 한 5명? 정도가 가기로 했는데 이 석ㅇ... 암튼 애들이 다 숙제나 다른 애는 광주로 간다고 해서 결국 혼자 다녀왔다.... (도착) (사실상 경치 감상하기 좋은 곳) 앞에 광화문에서 어떤 행사인지는 모르지만 행사를 해서 위에서 지켜다 보면서 기다리다가 입장을 하게 되었다. (입장) 이번에는 저번 구글 IO 때처럼 대충 듣고 가기 싫어서 앞자리를 차지했다. 기억에 남는 내용 몇 가지를 뽑자면  일단 첫 번째로 왼쪽은 Visual Studio 내장 에뮬로 구동을 한 설정 이고, 오른쪽은 그냥 윈도우 10에 내장된 설정 창이다. 대충 보면 많이 다른 것처럼 느껴지지만 ... 이 두 가지 방법을 이용하여 두 설정을 동시에 만들어 낼 수가 있다. 사이즈에 따라 속의 UI 가 바뀌어 진다는 것이 마치 반응형 웹 페이지를 보는 기분... 두 번째로 기억에 남는 내용은 컴파일 바인딩에 관련된 것이다. (왼쪽 : 동적 데이터 바인딩, 오른쪽 : 컴파일 바인딩) 두 가지 바인딩 식이 있는데 하나는 컴파일 바인딩 하나는 동적 데이터 바인딩 동적 데이터 바인딩은 DataContext 설정이 필요하다. 컴파일 바인딩은 바인딩 성능 향상 과 기존의 편리함을 유지하고 런타임 시 부하가 적고 리플렉션 코드가 최소화 된다. 그리고 변환된 코드는 무려 디버깅이 가능하다! 하지만 대상 타입의 명시적인 선언이 필요하고 해당 페이지의 멤버만 바인딩이 가능하다는 단점(?)이 있다. 그리고, 세 번째로 기억에 남는 부분은 Windows 10 IoT 에디션 인데.... 데스크탑 API의 54%공유 (나머지는 모바일 전용 셀롤러 데이터 등) 모바일의 84% (센서 부분을 위한 API) 최소사양이 램 256MB... 하나의 UI...

싱가포르 여행 2일차

 아침  진짜 한마디로 요약하자면 제일 맛있는게 사진 오른쪽에 오렌지 주스다. 어제 기대한 것 처럼 뷔폐식으로 나오긴 했는데 한국에서 먹던것과는 맛이 매우 큰차이가난다. 사진에는 없지만 밥이 우리나라처럼 서로 좀 달라붙는 그런 밥이아니라 그냥 흐트러지는 점성이 없는 밥이다... 그리고 가장 충격이였던게 시리얼 맛이 진짜 우리나라꺼만 먹다가 가면 이게 먹으라는건지 아니면 내가 잘못가져온 건가 라는 생각이 들 정도로 맛이 없다. 그냥 콘 시리얼이라 그런거 같긴 한데...뭔가 맛이 이상한 우유랑 섞이니 맛이 아주 개판이다. (한국꺼만 먹다간 내 기준)  시스코(CISCO) 견학  원래 내이름은 KIM GYUNG SIK인데...같은 발음인 저렇게 됫다 (여권도 저래됨)  역시 네트워크 관련 기업이라서 그런지 서버실은 기본이요 네트워크를 활용한 여러가지 기술들을 볼수 있엇다.그리고 외국 기업이라 그런지 내부 지원(?) 이 상당히 좋다...노는곳도잇고 낮잠을 잘수 있는곳까지 존재한다.  점심  솔직히 말해서 이메뉴 샤브샤브같은 거라던데...뭔가 우리나라의 샤브샤브랑은 너무 많은 차이가 있던 메뉴였다...소세지도 들어가고 닭고기도 들어가고 생선도 들어가고....  동물원  동 물원에 도착해서 들어가면 맨 처음으로 펭귄이 있는데 얘내가 너무 귀여웠다. 그리고 그다음으로는 5번째 사진의 이동수단을 이용해서 관람을 진행하는데 한국에서는 보지 못했던 여러가지 종류의 새를 볼수 있엇다. 마지막으로 여기서 공연을하는데 새를 이용하고 관객들이 참여할수 있단점에서 인상깊엇던 공연이였다  (한국에서는 본적이 없다...)  싱가포르 대학교   여긴 아쉽게도 찍은 사진이 한장밖에 없다. (한장 더있지만 팀 사진이라서 일단 보류) ...