포탈사이트 로그인프로그램 만들기 #3 Copyright 2018 by 오빠두엑셀 0
1. VBA 로웹문서접근및웹페이지정보수집하는방법엑셀 VBA 를통해웹페이지또는웹문서에접근하여정보를수정하고데이터를수집하기위해서는아래와같이크게 2 가지방법을사용합니다. 1-A. WinHTTP ( 또는 MSXMLHTTP) 이용 VBA 에서는 WinHTTP 또는 MSXMLHTTP 를이용하여웹문서또는웹페이지의데이터를수집하고편집할수있는기능을제공합니다. 엑셀 VBA 자체에서제공하는 XML 라이브러리를통해 Early Binding 하여이용할수도있고, 또는 CreateObject 명령문을통해 MSXML2 의 XMLHTTP 개체를불러서 Late Binding 하여이용할수도있습니다. WinHTTP 또는 XMLHTTP 는주로 VBA 를통해웹파싱 (Web Parsing, 웹페이지에서데이터를추출하는행위 ) 을할때이용하게됩니다. [ 링크 ] Early Binding 과 Late Binding 의차이점자세히알아보기 >> https://support.microsoft.com/en-us/help/245115/using-early-binding-and-late-binding-inautomation Early Binding( 정적바인딩 ) 과 Late Binding( 동적바인딩 ) 의차이점코딩에어려움을겪는분들을위해 Early Binding( 정적바인딩 ) 과 Late Binding( 동적바인딩 ) 의차이점을간략히안내해드리고자합니다. Early Binding 은엑셀 VBA 에서자체적으로제공하는 Reference 를이용하는것을이야기합니다. 즉코드실행전에 (Early) 개체를포함 (Binding) 하여코드를실행하게되고, 따라서우리가 String 이나 Long 과같은데이터타입을사용하듯이 Reference 를추가하여 XMLHTTP 과같은별도의데이터타입을다룰수있도록설정할수있습니다. Late Binding 은 CreateObject 명령문을이용하여코드실행중간 (Late) 에개체를불러오는 (Binding) 방식입니다. Late Binding 의장점은엑셀의버전상관없이어떠한 Object 라도불러서이용할수있으므로좀더유연한코딩을할수있다는점입니다. ( 예를들어 Calendar Reference 의경우버전별로제공되는경우가상이하므로 Late Binding 을통해이용할수있습니다.) 다만 Late Binding 의경우, VBA 에서각개체의속성값을자동으로지정해주지않으므로코드작성에어려움을겪을수있고, Early Binding 보다안정성면에서떨어지는단점이있으므로 VBA 에서제공되는 Reference 안에서는 Early Binding 을이용하는것을권장합니다. 1-B. IE (Internet Explorer) 이용 VBA 에서는 Internet Explorer 를통해사용자가직접브라우저를사용하듯이접근하여거의모든웹문서와웹페이지의정보를편집 / 수정할수있는툴을만들수있습니다. XMLHTTP 의경우추가로그인이필요하거나페이지보안문제로접근이어려운경우 API 키를받아이용해야하므로웹페이지에접근시도조차못하는경우도있습니다. 하지만 IE 를이용하게되면키보드와마우스의위치를시간의흐름대로지정하여코드를작성하므로대부분의웹문서나웹페이지에접근하여데이터를수집할 Copyright 2018 by 오빠두엑셀 1
수있습니다. 다만 IE 를이용하여웹문서나웹페이지에접근할경우, XMLHTTP 에비하여다소많은메모리를소모하고 속도가느리다는단점이있습니다. 2. Wait_Browser (IE 컨트롤을위한보조명령문작성 ) VBA 에서 IE 를통해웹문서나웹페이지를관리할시, 항상주의해야할부분은실행중인인터넷 익스플로러가 사용할준비가완료될때 까지, 즉웹문서의로딩이완료되고이후동작을위한준비가끝날 때까지기다린뒤그다음동작을취하는것입니다. 이러한동작을위해 Wait_Browser 라는보조명령문을아래와같이작성해줍니다. 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 2-A. Browser.REDAYSTATE 에대한이해 VBA 에서판단하는인터넷익스플로러의준비상태는아래와같이총 5 단계로구분됩니다. 실제코딩을하면서이용하게되는준비상태는 4 번, 즉모든준비가끝나고모든데이터를사용할수있는상태이며, Browser.Busy ( 로딩중, 또는실행중 ) 상태와조합하여인터넷익스플로러가다음동작을위해준비가완료된상태를판단하게됩니다. READYSTATE_UNINITIALIZED(0) : 브라우저초기화전상태 READYSTATE_LOADING(1) : 브라우저로딩 READYSTATE_LOADED(2) : 브라우저초기화완료 READYSTATE_INTERACTIVE(3) : 브라우저응답가능하지만일부데이터사용불가능 READYSTATE_COMPLETE(4) : 모든데이터사용가능상태 Copyright 2018 by 오빠두엑셀 2
2-B. Application.Wait 속성에대해알아보기 Application ( 엑셀프로그램 ) 에서의 Wait 속성을통해지정된시간까지코드를일시정지하고기다리는 행동을취할수있습니다. 사용법 : Application.Wait [Variant(Time)/ 시간 ] 출력값 : Boolean ( 참 / 거짓 ) 'Application.Wait 속성사용예제 > '## 현재시간에서 5 초가뒤의시간까지기다립니다. ## Application.Wait Now() + TimeValue("0:00:05") [ 링크 ] Application.Wait 속성에대해자세히알아보기 >> https://msdn.microsoft.com/en-us/vba/excel-vba/articles/application-wait-method-excel 2-C. DateAdd 함수사용법에대해알아보기 DateAdd 함수는 VBA 에내장된함수입니다. DateAdd 함수는변수로지정한기준시간에서, 입력한단위 / 값만큼의차이가나는결과값을 Variant(Date) 형태로출력합니다. 사용법 : DateAdd ( 단위, 값, 기준시간 ) 출력값 : Variant(Date) 단위의종류 : yyyy 년 d 일 ( 주말포함 ) h 시간 q 분기 w 평일 n 분 m 달 ww 주 s 초 'DateAdd 함수사용예제 > '## 현재시간기준 1 분뒤의값을출력합니다. DateAdd("n",1,Now()) '## 금일기준으로, 3 일뒤의값을출력합니다. DateAdd("d", 3, Date()) [ 링크 ] DateAdd 함수에대해자세히알아보기 >> https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/dateadd-function Copyright 2018 by 오빠두엑셀 3
3. 인터넷익스플로러를 200% 활용하기위한 HTML 활용법엑셀 VBA 를통해인터넷익스플로러를활용할때에 HTML 언어에대해약간의이해만하고있다면이를 200% 더효율적으로이용할수있습니다. HTML 에대한깊이알고있지않더라도, 목표가되는웹페이지에서사용중인 HTML 언어의대략적인흐름또는그구성만이해할수있다면, VBA 를통해서인터넷익스플로러에쉽게접근할수있습니다. 보편적으로사용되는인터넷브라우저 (Internet Explorer( 인터넷익스플로러 ), Chrome( 크롬 ), Firefox( 파이어폭스 )) 모두브라우저를실행한상태에서 F12 키를누르면개발자도구가나오고, 개발자도구를통해서현재보여지는웹페이지의 HTML 언어를쉽게분석할수있는데요그방법을공유해드립니다. 3-A. 브라우저에서개발자도구실행및성분분석도구선택실행중인브라우저에서 F12 키를눌러서개발자도구를실행합니다. 개발자도구가실행되면, 개발자도구좌측상단 ( 크롬의경우 ) 에위치한성분분석도구를선택합니다. 이후마우스커서를 HTML 언어를분석하고자하는위치로이동하게되면, 해당하는컨트롤에대해작성된 HTML 언어가표시되고이를바탕으로 VBA 를통해인터넷익스플로러를통제할수있게됩니다. 3-B. VBA 와인터넷익스플로러연동을위해반드시짚고넘어가야할속성 3 가지앞서말씀드렸듯이, VBA 를통해웹페이지연동 / 통제및데이터수집을할경우, 크게 WinHTTP( 또는 MSXMLHTTP) 를이용하거나또는 IE( 인터넷익스플로러 ) 를이용할수있다고말씀드렸습니다. 그중인터넷익스플로러를 VBA 와연동하는경우는, 보통사용자가웹페이지에서또다른행동을취해야할경우에사용하게되는데요. 그렇기때문에 VBA 와인터넷익스플로러를연동할경우사용할웹페이지의 HTML 언어중에서사용된 ( 또는웹페이지의각성분의통제하기위해사용할 ) 아래의 3 가지속성만체크한다면이후에는아주쉽게연동할수있습니다. 1. ID 속성 : 고유값에해당하는속성입니다. 만약사용할성분이 ID 값을통해구분된다면이후강의에서다루게될,.GetElementByID 함수를통해쉽게처리가가능하게됩니다. Copyright 2018 by 오빠두엑셀 4
2. Class 속성 : 만약통제하고자하는성분이 ID 값으로구분되지않는다면, Class 속성으로 1 차분류를하게됩니다. 마찬가지로이후강의에서다루게될,.GetElementByClassName 함수를통해처리할수있습니다. 3. Type 속성 : Class 속성을통해서 1 차로분류가된하나의그룹이생성되었습니다. 그리고해당그룹에서, Type 속성이특정값인성분을추출하면웹페이지에서원하는성분을통제할수있게됩니다. ( 대부분의웹문서는 Class-Type 을통한분류만하여도원하는속성을추출할수있습니다.) 더욱자세한내용은오빠두엑셀 VBA 2-3 영상강의에서확인해주세요! Copyright 2018 by 오빠두엑셀 5