오빠두엑셀 `2026 무료 챌린지` 오픈! 완주하고 수료증 받아가세요! 5년 연속 IT분야 베스트셀러! 「 진짜쓰는 실무엑셀 」로 2026년 공부 끝내기 엑셀이 막히셨나요? Q&A 게시판에서 바로 해결하세요.
메뉴
VBA 프로젝트 강의

[네이버로그인유저폼] 자동로그인 명령문

오빠두엑셀 by 오빠두엑셀
  • 학습시간 17분
  • 난이도 전문가
  • 작성일 2018.07.05

엑셀 VBA로 네이버와 다음을 자동로그인하는 방법! - VBA 명령문 작성

이 강의에서는 VBA의 Internet Explorer 개체를 활용해 네이버와 다음 사이트에 자동으로 로그인하는 프로그램을 만드는 방법을 다룹니다. 보안정책 변경에 대응한 SendKeys 처리부터 For Each 반복문으로 HTML 요소를 다루는 방법, On Error 구문으로 오류를 안정적으로 처리하는 방법까지 단계별로 정리합니다.

[네이버로그인유저폼] 자동로그인 명령문
DOWNLOADS

실습자료를 준비했어요

수업에서 사용한 예제 파일과 보충 자료를 한 곳에 정리했습니다!👇

패치노트

  • 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.Silent Boolean 인터넷 익스플로러가 새로운 페이지로 이동할 때 표시되는 Dialog Box(Message Box)의 출력을 차단합니다.

• 최근 웹페이지 대부분은 Dialog Box를 사용하지 않지만, 예기치 않은 차단을 방지하기 위해 Silent 속성은 항상 True로 설정하는 것을 권장합니다.

• Dialog Box가 VBA 명령문 실행 중 발생하면 제어 흐름이 중단되어 오류가 발생하므로, WScript 또는 SendKeys 등 별도의 키 입력 처리가 추가로 필요합니다.

IE.Visible Boolean 인터넷 익스플로러 창의 표시 여부를 결정합니다.
IE.Document HTML Document 인터넷 익스플로러에 로드된 HTML 문서 개체를 반환합니다. Document의 Body 속성으로 다양한 형태의 HTML 또는 InnerText 값을 추출할 수 있습니다.

IE.Document의 기본값은 Dynamic HTML 형태이므로, HTML 문서 안의 요소들을 상태값에 따라 검색하고 출력할 수 있습니다.

HTML 문서 (HTML Document) 속성 설명
속성/함수 타입 설명
IE.Document
.getElementByID('ID명')
HTMLElement IE의 Document에서 지정한 ID 값을 가진 요소를 검색하여 해당 개체를 반환합니다.

ID는 고유값이므로 항상 단일 개체만 반환됩니다.

IE.Document
.getElementByClassClassName
HTMLElement
또는
Variant
IE의 Document에서 지정한 Class 이름을 가진 요소들을 검색하여 해당 개체를 반환합니다.

동일한 Class 이름을 가진 요소가 여러 개 있을 수 있으므로, 두 개 이상이 검색되면 Variant(배열) 형태로 반환됩니다.

HTMLElement.Type String 선택된 HTML 요소의 Type 값을 반환합니다.
HTMLElement.Click - 선택된 HTML 요소를 클릭하는 동작을 수행합니다.

For Each 문의 사용방법

  1. For Each문 예제코드를 실행하기 위해 삽입(Insert) -> 모듈(Module)을 추가합니다. 새로 추가된 모듈에 아래 코드 전문을 복사·붙여넣기 한 뒤 실행(F5)합니다.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)이므로 총 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별 함수·속성 상세설명 보기

댓글 26
4.8 (12개 평가)
고수가되고파
고수가되고파 2020.01.30 14:10
강의 잘 보았습니다. 구글도 올려주신다고 했는데 기대되네요..
혹시 구글 로그인후 구글드라이브의 구글시트의 내용을 엑셀로 vba 가져올수 있나요 ?
오빠두엑셀
오빠두엑셀 작성자 2020.01.31 02:38
고수가되고파님 안녕하세요~^^*
구글 로그인 후 구글시트의 내용을 가져오는 작업은, Google Drive API 를 사용하면 될듯 합니다.

내용 확인해보니 Files -> Export 함수로 파일을 끌어올 수 있는듯 합니다. 단, 최대 용량은 10MB로 제한된다고 하네요.
Export 함수로 파일을 끌어온 뒤, 해당 파일을 실행해서 데이터를 불러오는 순서로 코드를 작성해보시겠어요?
Google API 전체 명령문은 아래 링크에서,
https://developers.google.com/drive/api/v3/reference
File Exports 명령문에 대한 상세설명은 아래 링크에서 확인해주세요 ^-^*
https://developers.google.com/drive/api/v3/reference/files/export

구글 로그인 강의는 올해안으로 꼭 준비해서 업로드 하겠습니다.
제 답변이 도움이 되셨길 바랍니다. 감사합니다.^-^*
새로운
새로운 2020.03.06 11:35
안녕하십니까. 좋은 자료 및 공유 감사합니다^^
다름이아니라, ID PW 입력필드에 값을 넣기 위해 HTML ID값이 아니라, Class 및 Type으로 입력값을 넣기 위해서는 어떻게 해야할까요?ㅠㅜ
오빠두엑셀
오빠두엑셀 작성자 2020.03.06 19:25
안녕하세요~^^
Class 로 값을 가져올 경우는 .getElementsByClassName 함수를 사용하시면 됩니다.
Type으로 값을 가져올 경우는 .getAttribute("type") 함수를 사용하시거나, 각 개체를 For문으로 불러오신 뒤, 개체.Type 으로 Type 값을 확인하실 수 있습니다 ^^
제 답변이 도움이 되셨길 바랍니다.
감사합니다.
새로운
새로운 2020.03.06 13:56
혹시 완성본 VBA 전문을 알 수 있을까요?ㅜㅠ
구글 로그인하는 로직을 알고싶어서요!
오빠두엑셀
오빠두엑셀 작성자 2020.03.06 19:25
안녕하세요~^^
암호는 제공해드리기 어려운 점 양해부탁드립니다.
감사합니다.
VBA어렵다
VBA어렵다 2020.05.17 19:43
버튼이 image 인 케이스는 어떻게 클릭할 수 있는지 궁금합니다.
오빠두엑셀
오빠두엑셀 작성자 2020.05.18 14:29
Click 명령문은 태그에 상관없이 모두 사용가능합니다.^^
예를 들어 HTMLDoc.getElementsByTagName("img") 으로 개체를 불러온 뒤, 개체.Click 이벤트를 실행하시면 됩니다.
오빠두 최고에요!
오빠두 최고에요! 2020.05.20 08:25
빠른 답변 감사합니다! :) 큰 도움이 되고 있습니다. 조언 주신 내용을 바탕으로 문법을 재작성 해보았는데도, 작동이 되지 않아서 다시 한번 질문을 남깁니다. 아래와 같이 HTML 주소를 토대로, VBA 문법을 작성했는데, 혹시 어떤 부분이 잘못된 것인지 조언해주시면 감사하겠습니다!

*HTML 주소* (뾰족 괄호를 넣으면 텍스트가 안보여서 "()"로 대체)
(div class="btn_login")(input type="image" src="../../img/member/btn_login.gif")(/div)

*작성한 VBA 문법*
For Each btnLogin In HTMLDoc.getElementsByTagName("image")
If btnLogin.className = "btn_login" Then btnLogin.Click: Exit For
Next
오빠두엑셀
오빠두엑셀 작성자 2020.05.20 17:07
명령문을 아래와 같이 작성하시면 될듯 합니다.
For Each btnLogin In HTMLDoc.getElementsByTagName("div")
If btnLogin.className = "btn_login" Then btnLogin.Click: Exit For
Next

제시해드린 답변이 문제해결에 도움이 되셨길 바랍니다.
VBA어렵다
VBA어렵다 2020.05.24 20:00
답변 감사합니다. 그런데 버튼이 안눌려져서 F8로 단계별 실행을 해봤는데
If btnLogin.className = "btn_login" then 까지만 노란색으로 하이라이트되고

btnLogin.click :Exit For은
그냥 하이라이트 없이 건너뛰고

Next에 바로 하이라이트가 되는 것이 반복되면서 (next 다음으로 넘어가지 않고 위의 프로세스가 계속 반복)
클릭하는 동작이 실행되지 않습니다!
혹시 에러의 원인에 대해서 조언을 구할 수 있을까요~?
오빠두엑셀
오빠두엑셀 작성자 2020.05.26 15:43
If btnLogin.className = "btn_login" then 은
클래스이름이 "btn_login" 일 때만 다음 단계로 넘어갑니다. 즉, 여러개의 개체를 하나씩 돌아가면서, 클래스 이름이 btn_login 일때만 다음 동작을 실행하게 되므로 btn_login 을 찾기 전까지는 if 문을 건너뛰는것이 정상입니다.
오빠두 최고에요!
오빠두 최고에요! 2020.05.20 08:29
웹을 인터넷 익스플로러 말고 크롬으로 불러 올 수 있는 방법이 있는지 궁금합니다!
오빠두엑셀
오빠두엑셀 작성자 2020.05.20 16:56
안녕하세요
VBA를 통해 크롬을 제어하려면 셀레니움 라이브러리를 사용하시면 됩니다^^
다만 추가 라이브러리 설치가 필요하므로, 여러컴퓨터와 공유시에는 라이브러리 설치파일도 같이 공유해주셔야 합니다
go****
go**** 2020.11.18 21:14
좋은 강의 감사합니다...
박상준
박상준 2020.11.19 15:32
안녕하세요!
항상 엑셀의 신세계를 보여주시는 오빠두님 애청자입니다!
크롤링해야할일이있어 큰맘먹고 천천히 따라하고있는대요
진행하다보니 유튜브 강의내용과 다른내용이 있어서요 ㅠㅠ
로그인버튼부분이 보안정책으로 변경되었다고 표기되어있는데 tpye 이나 class는 어떻게 입력해야하나요?ㅠㅠ
네이버가 아닌 사이트 크롤링준비중입니다!

'<--! 보안정책으로 해당 명령문을 변경합니다 -->
'For Each btnLogin In HTMLDoc.getElementsByClassName("btn_login")
'If btnLogin.Type = "submit" Then btnLogin.Click: Exit For
'Next
 
'// 2020년 1월 18일 내용 추가
오빠두엑셀
오빠두엑셀 작성자 2020.11.20 01:01
안녕하세요.
Type이나 Class 개체 정보를 가져오는 방법은 아래 강의를 참고해보세요.^^
https://www.oppadu.com/%ec%97%91%ec%85%80-vba-%ec%9b%b9-%ed%81%ac%eb%a1%a4%eb%a7%81-%ea%b0%95%ec%9d%98-%eb%84%a4%ec%9d%b4%eb%b2%84-%eb%89%b4%ec%8a%a4-%ec%8a%a4%ed%81%ac%eb%9e%a9/
로훈
로훈 2020.12.09 19:05
혹시 익스플로어가 곧 지원 종료 된다고 하는데 크롬으로는 할수 있나요!?!?
오빠두엑셀
오빠두엑셀 작성자 2020.12.09 21:30
안녕하세요?^^
네 가능합니다. Selenium Basic 이라는 라이브러리를 사용하여 크롬을 제어할 수 있습니다.
https://florentbr.github.io/SeleniumBasic/
호구박지성
호구박지성 2021.01.25 16:32
엑셀 셀에 아이디 패스워드를 입력해놓은 상태에서 그 정보로 지정 웹사이트를 로그인할 수 있도록 만들수 있나요
오빠두엑셀
오빠두엑셀 작성자 2021.01.26 16:58
안녕하세요.
네 가능합니다. 아이디/패스워드를 시트의 셀에서 받아올 수 있도록 명령문을 수정해보세요.
NaverLogin ActiveWorkBook.WorkSheets("시트명").Range("아이디셀주소").Value,  ActiveWorkBook.WorkSheets("시트명").Range("비번셀주소").Value
구글로그인
구글로그인 2021.04.27 00:32
안녕하세요! 네이버, 다음 로그인은 ID/PW를 한 페이지에서 입력하면 로그인이 가능하지만 보안이 강화된 사이트의 경우(ex 사내 시스템 로그인) 인증번호를 문자로 받고 추가로 내용을 입력해야 최종 로그인이 됩니다. 이럴 때 input등으로 내용을 입력 받아 원하는 화면에 입력하면 될 듯 한데.... input 함수에서 계속 오류가 납니다.. 대략 적으로 아래와 같이 작성(중간 과정 생략)했습니다. 잘못된 부분이 있을지 도움 부탁드립니다!

Sub cloudLogin(LoginID As String, LoginPW As String, AUTH_CODE As String)

Dim txtID As IHTMLElement
Dim txtPW As IHTMLElement
Dim txtNum As IHTMLElement

txtNum = Application.InputBox("Enter the AUTH_CODE :")
Set txtNum = HTMLDoc.getElementById("AUTH_CODE")
txtNum.Value = AUTH_CODE

' AUTH_CODE : 인증창 화면내 id
오빠두엑셀
오빠두엑셀 작성자 2021.04.27 21:40
안녕하세요.
명령문을 아래와 같이 수정해보시겠어요?
Dim txtID As IHTMLElement
Dim txtPW As IHTMLElement
Dim txtNum As IHTMLElement
Dim sNum As String
sNum = Application.InputBox("Enter the AUTH_CODE :")
Set txtNum = HTMLDoc.getElementById("AUTH_CODE")
txtNum.Value = sNum