우린 이전 시간에 테이블 태그를 한방에 엑셀로 가져오는 것을 연습하였다.
https://1stminokingdom.tistory.com/228
하지만 이번 본인이 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
'VBA > 엑사남_심화방' 카테고리의 다른 글
[심화방] VBA_심화_100제 #16 [ 소득세계산기] (0) | 2023.04.04 |
---|---|
[심화방] VBA_심화_100제 #14-1 [ 셀레니움 네이버항공 조회] (0) | 2023.04.02 |
[심화방] VBA_심화_100제 #14 [ 셀레니움 네이버항공 조회] (0) | 2023.04.01 |
[심화방] VBA_심화_100제 #13 [ 셀레니움 네이버 로그인] (0) | 2023.03.20 |
[심화방] VBA_심화_100제 #12 [ 셀레니움 자동화테스트] (0) | 2023.03.16 |
댓글