본문 바로가기
VBA/엑사남_심화방

[심화방] VBA_심화_100제 #15 [ 4대보험계산기]

by 일등미노왕국 2023. 4. 1.

우린 이전 시간에 테이블 태그를 한방에 엑셀로 가져오는 것을 연습하였다.

https://1stminokingdom.tistory.com/228

 

[심화방] VBA_심화_100제 #11 [ 셀레니움 Astable]

셀레니움으로 추출된 표는 KBO 홈페이지의 데이터를 추출한 내용이다. 웹의 데이터를 크롤링할때 우리는 table 태그 안에 tr태그와 td태그들을 For each 또는 For 순환문으로 적절하게 파씽하면서 크

1stminokingdom.tistory.com

하지만 이번 본인이 4대 보험계산기를 통해서 값을 가져오려 했을 때

이런식으로 폼만 가져오는 것을 보고 HTML을 살펴보았더니

이런식으로 비어있는것을 알 수 있었다.

자바스크립트로 뒷단에서 조건에 맞게 계산을 한 후 화면에 보여주는 형식인거 같아서 스크립트를 외부에서 알게 되서 VBA로 가져오는 코드를 완성하였다.

 

이 스크립트는 절대 안 잊어버릴것 같다. 진짜 어렵게 배운 코드여서....

 

자 그럼 저 스크립트를 어떻게 VBA로 가져오냐가 문제이다. 우린 앞서 [ ExecuteScript ] 의 존재를 안다.

 

바로 VBA에서 자바스크립트를 이용할 수 있는 코드이다. 저 스크립트로 가져온 값을 가져오기만 하면 된다.

Value = driver.ExecuteScript("return jQuery('selector').text();")

또는

Value = driver.ExecuteScript("return $('selector').text();")

물론 저 [ selector ]에는 태그를 집어넣는 것이고 ID 값은 #을 붙혀야하고, Class는 [ . ] 을 찍어야 한다.

 

이짧은 코드를 얻기 위해서 3일을 보냈는데... 만족할만한 결과가 나와서 기부니가 아주 조으다.

 

 

 

더보기
Sub 계산기_4대보험()

    Dim Sel As New Selenium.ChromeDriver
    Dim tbl As WebElement
    Dim rngAll As Range: Set rngAll = [b5:d9]
    Dim rngA As Range
    Dim strUrl$
    Dim V
    Dim str$, i&

    V = Array("lab111", "lab121", "lab131", "lab211", "lab221", "lab231", "lab241", "lab215", "lab261", "lab311", "lab341", "lab331", "lab411", "lab421", "lab431")
    
    strUrl = "https://www.4insure.or.kr/ins4/ptl/data/calc/forwardInsuFeeMockCalcRenewal.do#this"

    Sel.AddArgument "--headless"
    Sel.Start "chrome"                                                  '= 크롬으로 진행
    Sel.Get strUrl                                                      '= Url 이동
    
    Sel.FindElementByCss("#lab0001").SendKeys [b2]                      '= 월급여 입력
    Sel.FindElementByCss("img[src*='calc.png']").Click                  '= 계산버튼 클릭
    
    Set tbl = Sel.FindElementByCss(".calc_tableResult")                 '= 4대보험 테이블을 tbl로 선언
    tbl.AsTable.ToExcel ActiveSheet.[a4]                                '= 테이블 테그를 엑셀에 출력
   
    For Each rngA In rngAll
    
        rngA = Sel.ExecuteScript("return $('#" & V(i) & "').val();")       '= 순환문을 돌면서 아이디별 값들을 출력
    
        i = i + 1
    Next rngA
    
    Haja_Format
    
End Sub

4대보험계산기.xlsm
0.03MB

댓글