네이버 자동 로그인 엑셀 VBA 프로그램 만들기 :: 최종편

네이버/다음 자동 로그인을 위한 VBA 코드 전문과 각 코드의 동작원리를 단계별로 살펴봅니다.

홈페이지 » 네이버 자동 로그인 엑셀 VBA 프로그램 만들기 :: 최종편

네이버 자동 로그인 엑셀 VBA 프로그램 만들기 :: 최종 완성편

패치노트
  • 2018.11.27 : 네이버 보안정책 변경으로 인하여 '아이디'에서 '비밀번호' 입력창으로 넘어가는 중간에 'SendKeys' 명령문을 추가하였습니다. (비밀번호 창 탭 인식)
  • 2020.01.18 : 추가 네이버 보안정책 변경이 있었습니다. 따라서 로그인 버튼을 '탭' -> '엔터'키로 매뉴얼 이동하여 클릭하도록 명령문을 변경하였습니다.
네이버 자동 로그인 최종편 영상강의

네이버 자동 로그인 예제파일 다운로드

네이버 자동 로그인 VBA 전체 명령문
Sub NaverLogin(LoginID As String, LoginPW As String)
 
'// 네이버 자동 로그인 명령문 시작
Dim MyBrowser As InternetExplorer
Dim MyURL As String
Dim HTMLDoc As HTMLDocument
Dim txtID As IHTMLElement
Dim txtPW As IHTMLElement
Dim btnLogin As IHTMLElement
 
On Error GoTo Err_Clear
 
MyURL = "https://nid.naver.com/nidlogin.login"
 
Set MyBrowser = New InternetExplorer
MyBrowser.Silent = True
MyBrowser.Visible = True
MyBrowser.navigate MyURL
 
Wait_Browser MyBrowser
 
Set HTMLDoc = MyBrowser.document
 
Set txtID = HTMLDoc.getElementById("id")
txtID.Value = LoginID
 
'// 2018년 11월 27일 내용 추가
SendKeys "{TAB}"
 
Set txtPW = HTMLDoc.getElementById("pw")
txtPW.Value = LoginPW
 
'<--! 보안정책으로 해당 명령문을 변경합니다 -->
'For Each btnLogin In HTMLDoc.getElementsByClassName("btn_global")
'If btnLogin.Type = "submit" Then btnLogin.Click: Exit For
'Next
 
'// 2020년 1월 18일 내용 추가
 
SendKeys "{TAB}"
SendKeys "~"
 
Exit sub
 
Err_Clear:
If Err <> 0 Then
Err.Clear
Resume Next
End If
End Sub
네이버 자동 로그인 명령문 변수 설정
속성설명
MyBrowser네이버 로그인을 위해 실행할 새로운 Internet Explorer 개체입니다.
MyURL네이버 로그인을 위해 이동할 웹페이지의 주소입니다.
HTMLDoc네이버 로그인을 위한 웹페이지의 HTML문서 개체입니다.
txtID, txtPW로그인을 위해 아이디와 비밀번호를 입력할 텍스트박스 컨트롤입니다.
btnLogin아이디와 비밀번호를 입력한 뒤, 네이버 로그인을 위한 클릭버튼 컨트롤입니다.
인터넷 익스플로러(Internet Explorer) 속성
속성/함수상태설명
IE.SilentBoolean인터넷 익스플로러(Internet Explorer)가 새로운 페이지로 이동했을 시 나타나는 Dialog Box (Message Box)의 발생을 막아줍니다.
• 요즘 작성되는 웹페이지는 대부분 Dialog Box를 사용하지 않습니다만, 만약을 위해 Silent 속성은 항상 True로 작성하시는 것을 권장합니다.
• 만약 Dialog Box가 VBA 명령문 실행 중 발생되면, 제어 오류가 발생하게 되므로 WSScript 또는 별도의 Sendkey (키보드 입력) 등의 추가작업을 해줘야 합니다.
IE.VisibleBoolean인터넷 익스플로러(Internet Explorer)의 보여지는 상태를 결정합니다.
IE.DocumentHTML
Document
인터넷 익스플로러(Internet Explorer)에서 사용된 HTML문서 개체를 출력합니다. Document의 Body 속성을 통해 다양한 형태의 HTML 또는 InnerText 값을 출력할 수도 있습니다.
IE.Document의 Default 값은 Dynamic HTML 형태입니다. 따라서 HTML문서안에서 사용된 요소들을 상태값에 따라 검색하고 출력할 수 있게 됩니다.
HTML 문서 (HTML Document) 속성 설명
속성/함수출력값설명
IE.Document
.getElementByID(‘ID명’)
HTMLElement인터넷 익스플로러(IE)의 Document 중, 특정 ID값으로 설정된 요소를 검색 후 해당하는 개체를 출력합니다.
ID는 고유값이므로 하나의 개체만 출력합니다.
IE.Document
.getElementByClassClassName
HTMLElement
또는
Variant (Array)
인터넷 익스플로러(IE)의 Document 중, 특정 Class 명으로 설정된 요소들을 검색 후 해당하는 개체값을 모두 출력합니다.
하나의 HTML문서안에서 같은 Class 명으로 작성된 개체는 여러 개가 있을 수 있으므로, 해당 값이 여러 개 있을 경우 Variant(배열) 형태로 출력됩니다.
HTMLElement.TypeString해당 HTML문서에서 선택된 개체의 Type 값을 출력합니다.
HTMLElement.Click-해당 HTML문서에서 선택된 개체를 클릭하는 행동을 취합니다.

For Each 문의 사용방법

  1. For Each문 예제코드를 실행하기 위해, 삽입(Insert) -> 모듈(Module) 을 추가합니다. 이후, 새로 추가된 모듈안에 아래 코드 전문을 복사/붙여넣기 한 뒤, 실행(F5)합니다.
    VBA 편집창에서 새로운 모듈을 추가해줍니다.
    VBA 편집창에서 새로운 모듈을 추가해줍니다.
    Sub For_Each_Test()
     
    '#######################
    '범위개체를 설정합니다.
    '#######################
    Dim Rngs As Range
    Dim Rng As Range
     
    '#######################
    'Sheet1 중 여러개의 셀(A1부터 B3)를 Rngs안에 할당합니다.
    'Range 개체로 여러개의 셀이 할당될 경우, Array(배열) 형태로 자동으로 데이터형식을 설정해줍니다.
    '#######################
    Set Rngs = Sheet1.Range("A1:B3")
     
    '#######################
    '선택된 여러개의 셀 을 하나씩 (For Each) 선택하여
    '각 셀의 셀주소를 메세지박스로 출력합니다.
    '#######################
    For Each Rng In Rngs
        MsgBox Rng.Address
    Next
     
    End Sub
  2. For Each문은 언제 사용하나요?
    For Each 문은 개체안의 여러개의 값을 하나씩 돌아가며 어떠한 행동을 취할 때 사용합니다.
  3. For Each 문의 사용 예제 #1
    For Each btnLogin In HTMLDoc.getElementsByClassName("btn_global")
    If btnLogin.Type = "submit" Then btnLogin.Click: Exit For
    Next
    '네이버 자동 로그인'을 위해 작성된 코드 내에서 사용된 For Each 문입니다.
    HTML문서에서 ‘btn_Global’이라는 Class 이름으로 작성된 개체를 하나씩 불러옵니다. (순서는 문서의 위에서부터 아래방향으로 출력합니다.)
    출력된 개체 중, Type 명이 ‘submit’일 경우 그 개체를 클릭한 뒤 For Each 문을 종료합니다.
  4. For Each 문의 사용 예제 #2
    Set Rngs = Sheet1.Range("A1:B3")
     
    For Each Rng In Rngs
        MsgBox Rng.Address
    Next
    Rngs는 Sheet1의 범위(A1:B3) 입니다. 따라서 Rngs 에는 총 6개의 셀이 입력되며, 각 셀의 주소를 메세지박스로 출력합니다. (출력하는 순서는 행->열 순서로 출력합니다. A1->B1->A2->B2->A3->B3)

VBA 오류처리(에러처리) / Error Handling 방법

모든 프로그래밍 작업은 ‘오류를 처리하는 것’과의 싸움이 아닐까 생각합니다.^^; 따라서 오류처리를 잘 하게 되면 이후 발생하는 문제를 더욱 손 쉽게 처리할 수 있는데요.

이번 강의에서는 대표적으로 가장 많이 사용되면서도 잘못 사용할 경우 전체 프로그램에 심각한 오류를 초래할 수도 있는, ‘오류를 무시한 채 다음단계를 진행’ 하는 방법을 소개해드리고자 합니다.

오류를 무시하고 다음 단계 진행하기 #1
'## 오류가 발생하면 Err_Clear 로 이동합니다.
'## 즉 오류가 발생하면 아래 작성된 Err_Clear: 부분으로 이동합니다.
On Error GoTo Err_Clear
 
'## 실제 구동될 명령문 입력
Exit sub
 
'## 오류가 발생하면 Err_Clear: 이후 부분의 코드가 실행됩니다.
'## 오류번호가 0이 아닐 경우 (즉 어떤 오류라도 발생하면), 오류를 지운 뒤
'## 다음 코드로 넘어갑니다.
Err_Clear:
If Err <> 0 Then
Err.Clear
Resume Next
End If
End Sub
오류를 무시하고 다음 단계 진행하기 #2

또는 아래와 같이 On Error Resume Next 를 통해서 더욱 간단하게 작성할 수도 있습니다.

'## 오류가 발생하면 오류를 무시하고 다음 코드로 넘어갑니다.
On Error Resume Next
 
'## 실제 구동될 명령문을 입력
MsgBox 1=0   '<--! 이 구문은 오류를 반환해야 하지만 다음단계로 넘어갑니다.
MSgBox 1=1
 
End sub

다음(Daum) 자동 로그인 코드 전문

Sub DaumLogin(LoginID As String, LoginPW As String)
 
'// 다음 자동 로그인 명령문 시작
Dim MyURL As String
Dim MyBrowser As InternetExplorer
Dim HTMLDoc As HTMLDocument
Dim txtID As IHTMLElement
Dim txtPW As IHTMLElement
Dim btnLogin As IHTMLElement
 
On Error Resume Next
 
'// 네이버 자동 로그인 명령문과 다른 부분입니다. (URL주소)
MyURL = "https://logins.daum.net/accounts/toploginform.do"
 
Set MyBrowser = New InternetExplorer
MyBrowser.Silent = True
MyBrowser.Visible = True
 
MyBrowser.navigate MyURL
 
Wait_Browser MyBrowser
 
Set HTMLDoc = MyBrowser.document
 
'// 네이버 자동 로그인 명령문과 동일하게 설정합니다.
Set txtID = HTMLDoc.getElementById("id")
txtID.Value = LoginID
Set txtPW = HTMLDoc.getElementById("inputpwd")
txtPW.Value = LoginPW
 
Set btnLogin = HTMLDoc.getElementById("loginSubmit")
btnLogin.Click
 
Wait_Browser MyBrowser
 
End Sub

링크] Browser.Silent 속성 상세설명 보러가기 (영문) 
링크] Browser.Document 속성 상세설명 보러가기 (영문)
링크] HTML Document에서 사용되는 Class별 함수/속성 상세설명 보러가기

5 5 votes
게시글평점
현재 페이지 댓글알림 신청
알림 설정
guest
14 Comments
Inline Feedbacks
View all comments
고수가되고파
고수가되고파
2020년 1월 30일 2:10 오후
게시글평점 :
     

강의 잘 보았습니다. 구글도 올려주신다고 했는데 기대되네요..
혹시 구글 로그인후 구글드라이브의 구글시트의 내용을 엑셀로 vba 가져올수 있나요 ?

새로운
새로운
2020년 3월 6일 11:35 오전
게시글평점 :
     

안녕하십니까. 좋은 자료 및 공유 감사합니다^^
다름이아니라, ID PW 입력필드에 값을 넣기 위해 HTML ID값이 아니라, Class 및 Type으로 입력값을 넣기 위해서는 어떻게 해야할까요?ㅠㅜ

새로운
새로운
2020년 3월 6일 1:56 오후
게시글평점 :
     

혹시 완성본 VBA 전문을 알 수 있을까요?ㅜㅠ
구글 로그인하는 로직을 알고싶어서요!

VBA어렵다
VBA어렵다
2020년 5월 17일 7:43 오후
게시글평점 :
     

버튼이 image 인 케이스는 어떻게 클릭할 수 있는지 궁금합니다.

오빠두 최고에요!
오빠두 최고에요!
2020년 5월 20일 8:25 오전

빠른 답변 감사합니다! 🙂 큰 도움이 되고 있습니다. 조언 주신 내용을 바탕으로 문법을 재작성 해보았는데도, 작동이 되지 않아서 다시 한번 질문을 남깁니다. 아래와 같이 HTML 주소를 토대로, VBA 문법을 작성했는데,… 더보기 »

VBA어렵다
VBA어렵다
2020년 5월 24일 8:00 오후

답변 감사합니다. 그런데 버튼이 안눌려져서 F8로 단계별 실행을 해봤는데 If btnLogin.className = "btn_login" then 까지만 노란색으로 하이라이트되고 btnLogin.click :Exit For은 그냥 하이라이트 없이 건너뛰고 Next에 바로 하이라이트가 되는 것이 반복되면서… 더보기 »

오빠두 최고에요!
오빠두 최고에요!
2020년 5월 20일 8:29 오전
게시글평점 :
     

웹을 인터넷 익스플로러 말고 크롬으로 불러 올 수 있는 방법이 있는지 궁금합니다!

14
0
여러분의 생각을 댓글로 남겨주세요.x