오늘은 소득세 계산기를 만들어보려고 한다.
https://incometax.calculate.co.kr/earned-income-tax-calculator
사이트에서 필요한 내용을 선택해서 값을 넣으면 계산해주는 방식이다.
더보기
Sub 소득세계산기()
Dim Sel As New Selenium.ChromeDriver
Dim rngAll As Range
Dim rngA As Range
Dim Reg As Object: Set Reg = CreateObject("vbscript.regexp") '= 정규식 선언
Dim Mat As Object '= 정규식 일치값
Dim strUrl$
Dim strText$, i&
If [b4] >= [b3] Then Exit Sub
Set rngAll = Union([b9], [d9], [b10], [b12], [d12], [b13], [b15], [d15], [b16])
strUrl = "https://incometax.calculate.co.kr/earned-income-tax-calculator"
Sel.AddArgument "--headless" '= 헤드리스
Sel.Start "chrome" '= 크롬으로 진행
Sel.Get strUrl '= Url 이동
Sel.FindElementByCss("#earnedIncomePay").SendKeys [b2] '= 월급여 입력
Sel.FindElementByCss("#earnedIncomeFamily").AsSelect.SelectByValue [b3] '= 부양 가족
Sel.FindElementByCss("#earnedIncomeChild").AsSelect.SelectByValue [b4] '= 취학아동
Sel.Wait (2000) '= 2초 대기
Sel.FindElementByCss("#cal_earnedIncome").Click '= 계산 버튼 클릭
Sel.Wait (2000) '= 2초 대기
strText = Sel.FindElementByCss(".result-earned-income-tax").Text '= 텍스트값 가져오기
With Reg
.Pattern = "(\d.{4,10})\s원"
.Global = True
Set Mat = .Execute(strText) '= 가져온 텍스트값 분리하기
End With
For Each rngA In [b9:d16] '= [b9:d19] 을 순환하면서
If Not Intersect(rngA, rngAll) Is Nothing Then '= rngall 영역과 교집합을 이루면
rngA = Mat(i).submatches(0) '= 정규식으로 분리한 값들을 할당
i = i + 1 '= 다음을 위해서 i값 +1
End If
Next rngA
End Sub
strText = Sel.FindElementByCss(".result-earned-income-tax").Text
Debug.Print strText
직접 실행창에 본 코드를 실행하면 아래와 같이 텍스트 값이 나오게 된다.
우린 여기서 금액만 가져오면 되기 때문에 정규식을 이용하면 금액만 가져올 수 있다.
패턴의 설명은 숫자로 시작하고 다음 임의의 문자(숫자,문자,공백.....)부터 4이상 10이하의 문자로 구성되었으며 + 공백과 [원]이 포함된 패턴이다.
정규식까지 쓰면서 크롤링을 한 이유는
HTML 구조상 이것을 크롤링하려면 너무나 많은 반복문과 중복 반복문이 사용되어야 하기 때문에 텍스트값을 모두 가져와서 정규식으로 원하는 값만 추출한 것이다.
이렇게 추출된 값들을 해당 영역에 집어넣으면 계산기를 완성할 수 있다.
'VBA > 엑사남_심화방' 카테고리의 다른 글
[심화방] VBA_심화_100제 #18 [ 유튜브댓글 조회하기] (0) | 2023.06.12 |
---|---|
[심화방] VBA_심화_100제 #17 [ 당근마켓 조회하기] (0) | 2023.04.17 |
[심화방] VBA_심화_100제 #14-1 [ 셀레니움 네이버항공 조회] (0) | 2023.04.02 |
[심화방] VBA_심화_100제 #15 [ 4대보험계산기] (0) | 2023.04.01 |
[심화방] VBA_심화_100제 #14 [ 셀레니움 네이버항공 조회] (0) | 2023.04.01 |
댓글