컴퓨터 공부/엑셀 & VBA

[엑셀vba] 인터넷 익스플로러 컨트롤하기 2(자동로그인)

도 박사 2020. 6. 15. 23:26
반응형

[엑셀vba] 인터넷 익스플로러 컨트롤 하기 1

 

[엑셀vba] 인터넷 익스플로러 컨트롤 하기 1

[엑셀vba] 인터넷 익스플로러 컨트롤하기 2(자동로그인) [엑셀vba] 인터넷 익스플로러 컨트롤하기 2(자동로그인) 이전글: [엑셀vba] 인터넷 익스플로러 컨트롤 하기 1 엑셀VBA로 옥션에 자동로그인을

godofexcel.tistory.com

[엑셀vba] 인터넷 익스플로러 컨트롤하기 3(웹 크롤링)

 

[엑셀vba] 인터넷 익스플로러 컨트롤하기 3(웹 크롤링)

[엑셀vba] 인터넷 익스플로러 컨트롤 하기 1 [엑셀vba] 인터넷 익스플로러 컨트롤 하기 1 [엑셀vba] 인터넷 익스플로러 컨트롤하기 2(자동로그인) [엑셀vba] 인터넷 익스플로러 컨트롤하기 2(자동로그�

godofexcel.tistory.com

 

 

 

 

엑셀VBA로 옥션에 자동로그인을 해보자.

 

  • 준비물

      옥션 계정 정보, 옥션 로그인 주소, 크롬, 인터넷 익스플로러

 

  • 매크로 진행 계획
  1. 인터넷 익스플로러 실행
  2. 옥션 로그인 페이지로 이동
  3. 아이디, 비번 입력 후 로그인 버튼 클릭
  4. 끄읕

 

  • 매크로 만들기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub 옥션로그인하기()
 
    Dim IE_ctrl As InternetExplorer
    Dim HTMLDoc As IHTMLDocument
    Dim input_Data As IHTMLElement
    Dim URL As String
    
    URL = "https://memberssl.auction.co.kr/Authenticate/default.aspx?url=http%3A%2F%2Febay.auction.co.kr%2F%3Fgclid%3DEAIaIQobChMImrbTyN-D6gIVCFRgCh1v5gbtEAAYASAAEgLrvfD_BwE"
    
    Set IE_ctrl = New InternetExplorer
    IE_ctrl.Silent = True
    IE_ctrl.Visible = True
    IE_ctrl.navigate URL
 
End Sub
cs

*변수 역할

IE_ctrl: 인터넷 익스플로러 정보를 담음

HTMLDoc: 로딩된 인터넷 페이지의 소스를 담음

input_Data: 로그인 정보 넣을 때 쓸 변수

URL: 사이트 주소 담을 변수

 

위 코드를 실행하면 옥션로그인 페이지가 열리면서 매크로가 종료된다.

여기에 로그인 하는 코드를 추가할 예정이다.

 

 


자동 로그인 코드를 작성 할 때 로그인 페이지의 태그 분석이 필요하다.

생각보다 개쉬움

 

옥션 로그인 페이지

크롬에서 옥션 로그인 페이지로 들어간다.

옥션url: https://memberssl.auction.co.kr/Authenticate/?url=http%3a%2f%2fwww.auction.co.kr%2f&return_value=0

 

 

태그 확인하기
③번 부분 확대

로그인 페이지가 나오면 키보드의 'F12' 키를 누른다

-> ①번 표시를 누르고

-> 아이디 입력칸을 마우스로 클릭하면 (②)

-> ③번 화면에서 옥션 아이디 입력하는 곳의 태그ID를 확인 할 수 있음(패스워드나, 로그인 버튼도 같은 방법으로 확인)

 

코드 작성 시에 필요한 정보니 인터넷 창을 계속 켜두자.


 

HTML 태그에 ID가 있는 경우

1
2
3
4
5
6
7
8
9
10
    Set HTMLDoc = IE_ctrl.document
    
    Set input_Data = HTMLDoc.getElementById("id")
    input_Data.Value = "옥션ID"
    
    Set input_Data = HTMLDoc.getElementById("password")
    input_Data.Value = "옥션PW"
    
    Set input_Data = HTMLDoc.getElementById("Image1")
    input_Data.Click
cs

Set HTMLDoc = IE_ctrl.document :로딩된 페이지의 소스를 불러옴

 

Set input_Data = HTMLDoc.getElementByID("id") : 아이디 입력하는 태그ID

input_Data.value = "옥션ID" :아이디 입력하는 곳에 '옥션ID'를 입력함

 

Set input_Data = HTMLDoc.getElementByID("password") : 패스워드 입력하는 태그 ID

input_Data.value = "옥션PW" :패스워드 입력하는 곳에 '옥션PW'를 입력함

 

Set input_Data = HTMLDoc.getElementById("Image1") : 로그인 버튼의 태그를 찾아냄

input_Data.Click : 로그인 버튼을 누름

 

 

태그 ID가 있으면 웹 컨트롤에 상당히 편리하다.

하지만 ID가 없다면 어떻게 할텐가

그럴땐 다른 데이터로 하면 된다.


HTML 태그 ID가 없을 때 Class 이용

 

1
2
3
4
5
6
7
8
9
10
    Set HTMLDoc = IE_ctrl.document
    
    Set input_Data = HTMLDoc.getElementsByClassName("txt").Item
    input_Data.Value = "옥션ID"
    
    Set input_Data = HTMLDoc.getElementsByClassName("txt").Item
    input_Data.Value = "옥션PW"
    
    Set input_Data = HTMLDoc.getElementsByClassName("btn_login").Item
    input_Data.Click
cs

Set HTMLDoc = IE_ctrl.document :로딩된 페이지의 소스를 불러옴

 

Set input_Data = HTMLDoc.getElementsByClassName("txt").item : 아이디 입력하는 Class

input_Data.value = "옥션ID" :아이디 입력하는 곳에 '옥션ID'를 입력함

 

Set input_Data = HTMLDoc.getElementsByClassName("txt").item : 패스워드 입력하는 Class

input_Data.value = "옥션PW" :패스워드 입력하는 곳에 '옥션PW'를 입력함

 

Set input_Data = HTMLDoc.getElementsByClassName("btn_login").Item : 로그인 버튼의 Class

input_Data.Click : 로그인 버튼을 누름

 

아이디와 패스워드 태그의 클래스가 같다.

옥션의 경우 아이디와 패스워드 입력하는 곳의 Class가 동일하다.

위 코드를 실행하면 아이디 입력하는 곳에 아이디, 패스워드가 입력되면서 로그인 오류가 난다.

 

Class는 중복으로 쓰이는 경우가 많으므로 짜증난다. 

그래서 내가 원하는 Class가 나올때 데이터를 입력하도록 만들어 줘야 한다.

 

어떻게?

 

For Each를 이용하자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    Set HTMLDoc = IE_ctrl.document
    
    Set input_Data = HTMLDoc.getElementsByClassName("txt").Item
    input_Data.Value = "옥션ID"
    
    For Each input_Data In HTMLDoc.getElementsByClassName("txt")
        If input_Data.Type = "password" Then
            input_Data.Value = "옥션pw"
            Exit For
        End If
    Next
  
    Set input_Data = HTMLDoc.getElementsByClassName("btn_login").Item
    input_Data.Click
cs

For Each input_Data In HTMLDoc.ElementsByClassName("txt")

     if input_Data.Type = "password" then

         input_Data.Value = "옥션pw"

         Exit For

     end if

Next

 

패스워드 입력하는 부분만 바꿨다.

 

for each 함수는 태그 클래스가 'txt'것들을 html 소스의 위에서 아래로 가져온다.(html 소스는 HTMLDoc 변수에 저장되어있음)

그리고 if문으로 태그 타입이 'password' 인 녀석이 나타나면 '옥션pw'를 입력하고 for문을 탈출 한다.


옥션로그인하기 코드 전문

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Sub 옥션로그인하기()
 
    Dim IE_ctrl As InternetExplorer
    Dim HTMLDoc As IHTMLDocument
    Dim input_Data As IHTMLElement
    Dim URL As String
    
    URL = "https://memberssl.auction.co.kr/Authenticate/?url=http%3a%2f%2fwww.auction.co.kr%2f&return_value=0"
    
    Set IE_ctrl = New InternetExplorer
    IE_ctrl.Silent = True
    IE_ctrl.Visible = True
    IE_ctrl.navigate URL
    
    Wait_Browser IE_ctrl
    
    Set HTMLDoc = IE_ctrl.document
    
    Set input_Data = HTMLDoc.getElementsByClassName("txt").Item
    input_Data.Value = "옥션ID"
    
    For Each input_Data In HTMLDoc.getElementsByClassName("txt")
        If input_Data.Type = "password" Then
            input_Data.Value = "옥션PW"
            Exit For
        End If
    Next
    
    
    Set input_Data = HTMLDoc.getElementsByClassName("btn_login").Item
    input_Data.Click
    
End Sub
cs

 

* 중간에 있는 Wait_Browser IE_ctrl 역할

 Wait_Browser : 사용자 정의 함수

IE_ctrl이 페이지 로딩이 끝날때까지 대기하도록 해줌

 

 

Wait_Browser 코드 

1
2
3
4
5
6
7
8
9
Sub Wait_Browser(Browser As InternetExplorer, Optional t As Integer = 1)
 
While Browser.Busy Or Browser.readyState <> 4
DoEvents
Wend
 
Application.Wait DateAdd("s", t, Now)
 
End Sub
cs

 

 

매크로 실행영상

 

매크로 실행영상

 

반응형