웹뷰에서 자바 스크립트설정이랑 쿠키도 끝낫으니 이제 요청헤더에 몇몇개의 값을 추가해줘야된다.
나중에 로딩할때
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);
나중에 로딩할때
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&url=http%3A%2F%2Fwww.naver.com&t=20120425";
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&url=http%3A%2F%2Fwww.naver.com&t=20120425";
이렇게 설정해 주고나면 마지막 작업이기도 하고 가장 중요한 부분이 남앗다.
이제 WebViewClient를 이용해서 자동화를 완성해야된다.
@Override
public void onPageFinished(WebView v, String url){
public void onPageFinished(WebView v, String url){
일단 WebViewClient 를 상속해서 웹뷰를 정의한 클래스 내부에 클래스를 하나 만들어 준다.
Ex) protected class ViewClient extends WebViewClient
그리고 아래와 같은 함수를 정의해 줘야되는데
@Override
public void onPageFinished(WebView v, String url){
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" +
"};";
"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();
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;
}
process_login.this.finish();
} else {
view.loadUrl(url);
}
return true;
}
- 로그인 끝
- url 에 cafe가 포함되지 않은 경우에는 [카페 주소]를 로드
- 로드가 되면 CookieSyncManager에 쿠키 동기화
- dialog 종료 (넣어둔 경우만 해당)
- 할거 다 했으므로 다른 엑티비티로 전환
- 웹뷰가 포함된 엑티비티를 종료
//2016-08-25 글 수정 : 네이버 로그인 페이지 수정으로 인한 버튼 CSS선택자 수정
int_jogin은 뭔가요?
답글삭제안녕하세요. 답글이 늦어져서 죄송합니다
삭제그 위에서 작성한 js에서의 .int_jogin은 네이버 로그인 페이지에 있는 로그인 버튼에 대한 CSS 선택자입니다.
혹시 몰라서 확인해보니 네이버가 로그인 하는곳을 약간 수정해놨는지 로그인 버튼에 대한 CSS 선택자가 btn_global로 바꿔져 잇네요... 위에 스크립트를 이용해서 네이버 로그인을 하실거면 int_jogin 을 btn_global 로 바꾸셔서 사용하시면 될 것 같습니다.
삭제안녕하세요 저는 컴퓨터/보안 관련 공부를 하고있는 학생입니다. 안드로이드에서 네이버 자동로그인 관련 자료를 검색하던 중 선생님의 블로그를 보게되었습니다. 블로그에 올려주신 코드를 보았을때 중간중간 이해가 잘 되지 않는 부분들이 있어서.. 혹시 코드 공유가 가능할까요? 학습용으로만 사용하겠습니다.
답글삭제안녕하세요 저는 컴퓨터/보안 관련 공부를 하고있는 학생입니다. 안드로이드에서 네이버 자동로그인 관련 자료를 검색하던 중 선생님의 블로그를 보게되었습니다. 블로그에 올려주신 코드를 보았을때 중간중간 이해가 잘 되지 않는 부분들이 있어서.. 혹시 코드 공유가 가능할까요? 학습용으로만 사용하겠습니다.
답글삭제