크롤링 시 브라우저 확인창 닫기

VBA
작성자
나는나
작성일
2021-04-20 18:38
조회
79

안녕하세요.

URL : https://www.rra.go.kr/ko/license/A_c_search.do#

인증/등록 번호 : R-R-pNd-Smartcattoys (예시로 입력할 인증번호입니다.)

입력하고 '검색'을 클릭하면 '확인'창이 하나 뜹니다. 이 창을 클릭해서 닫아야 결과 페이지로 이동하는데 어떻게 닫는지 모르겠습니다.

Q1. CreateObject("InternetExplorer.Application")로 크롤링 시 닫는 방법

Q2. CreateObject("MSXML2.XMLHTTP")로 크롤링 시 닫는 방법

Q3. Selenium + Chrome Webdriver로 크롤링 시 닫는 방법

'확인'창이라고 불렀는데 정확히 뭐라 부르는지 몰라서요.(Alert, Modal, PopUp...?)

개발자도구(F12)로는 '확인'창 접근이 되지 않아서 .Click이나 Sendkeys 따위로 제어가 안 되는 군요. 먼저 '확인'창으로 포커싱한 후에 어떤 명령을 해야 할 것 같은데 좀 도와주세요.

회원등급 : 새싹등급
포인트 : 148 EP
총질문 : 6 개 (마감율 : 50%)
채택답변 : 0 개
전체 7

  • 2021-04-20 18:55

    안녕하세요.

    말씀하신 페이지는 HTTP 요청으로 정보를 받아올 수 있습니다.

    GetHTTP 함수로 크롤링해보세요.

    엑셀 크롤링 함수 :: GetHttp 명령문 사용법

    Sub Test()
    
    Dim htmlResult As Object
    Dim htmlString As String
    
    Set htmlResult = CreateObject("htmlfile")
    Set htmlResult = GetHttp("https://www.rra.go.kr/ko/license/A_c_search_view.do", "app_no: R-R-pNd-Smartcattoys")
    htmlString = htmlResult.body.innerhtml
    
    End Sub

    제시해드린 답변이 문제해결에 도움이 되셨길 바랍니다. 감사합니다.


    • 2021-04-20 20:25

      우선 빠른 답변 감사합니다.

      그런데 답변 내용이 제 질문과 아무런 관련이 없는 것 같습니다. 다른 분들 문의글 보니, 답변 후에는 댓글 통해 추가 문의를 해도 확인을 안 하는 것 같아서 새글로 재문의 남겼습니다.


      • 2021-04-21 14:17

        안녕하세요.

        답변드린 내용은 2번째 방법인 XML 방식으로 해결하는 방법입니다. HTTP 요청은 팝업창(브라우저)없이 네트워크에서 바로 받아오는 방식이기 때문에 팝업창 핸들이 없습니다.

        다른 방법으로 해결하시려면,

        ie를 사용하실 경우 FindWindow 함수를 통해 팝업창의 OK버튼을 클릭하시면 됩니다. "웹 페이지 메시지"로 hWnd를 검색하시면 됩니다. 관련 내용은 아래 강의를 참고해보세요.

        엑셀 카카오톡 자동화 프로그램 만들기 (윈도우 API 응용)

        셀레니움을 사용하신다면 해결책은 간단합니다.

        드라이버.switchTo().alert().accept();

        코드를 명령문 마지막에 추가해보세요.

        제시해드린 답변이 문제 해결에 도움이 되셨길 바랍니다. 감사합니다.


        • 2021-04-21 17:31

          다시 찾아 답변 주셔서 감사합니다.

          XML은 많이 써봤습니다만 답변에서 주신 결과물은 검색 결과 페이지의 html이 아닙니다. 처음 조회하기 위한 url의 html이 그대로 출력됩니다. 브라우저 화면이 없어서 결과물이 어떻게 나오는지 확인 못 하신 것 같습니다. 그래서 재문의 했던 겁니다.

          hWnd도 전에 다뤄봤었는데 다른 대안이 없을 때 써볼만 한 것 같고, IE와 달리 크롬 브라우저에서는 별도의 윈도우 창이 아니어서 이 방법이 될지 의문이 들었습니다.

          실제 작업은 Selenium + ChromeDriver 조건이었는데요. 그래서 하루 종일 구글링 결과 드라이버.switchTo().alert().accept();를 찾긴 했지만, 실제 VBA에 적용해 보시면 알겠지만 에러가 납니다. 파이썬용 명령어여서 그런 것으로 추측됩니다. 사실 여기에서 막혀서 오빠두에 문의를 드렸고 쉽게 답변을 받을 것으로 생각했었습니다.(IE나 XML 방식은 그냥 덤으로...)

          결론은 셀레니움에서 아무 괄호나 세미콜론 없이 .SwitchToAlert.Accept 이렇게 추가하면 간단히 해결되는 거였습니다.

          아무튼 시간은 많이 버렸지만 이를 통해서 또 많이 배웠습니다. VBA 관련 유튜브에서 많은 도움을 받고 있습니다. 감사합니다.


          • 2021-04-22 22:39
            채택된 답변

            그러셨군요.. 이전에 올려드린 코드를 정확히 테스트해보지 않아 문제가 있었습니다.

            혼선을 드려 죄송합니다.

            셀레니움으로 문제를 잘 해결하셨다니 정말 다행입니다. 🙂

            아래 HTTP 요청으로 크롤링 가능한 명령문을 적어드리니 한번 확인해보세요.

            제시해드린 답변이 문제 해결에 도움이 되셨길 바랍니다.

            감사합니다.

            Sub Test()
            
            Dim htmlResult As Object
            Dim htmlString As String
            Dim vArr As Variant
            ReDim vArr(0 To 5)
            
            vArr(0) = Array("Referer", "https://www.rra.go.kr/ko/license/A_c_search.do")
            vArr(1) = Array("Host", "www.rra.go.kr")
            vArr(2) = Array("Origin", "https://www.rra.go.kr")
            vArr(3) = Array("Content-Type", "application/x-www-form-urlencoded")
            vArr(4) = Array("Connection", "keep-alive")
            vArr(5) = Array("Content-Language", "ko")
            
            Set htmlResult = CreateObject("htmlfile")
            Set htmlResult = GetHttp("https://www.rra.go.kr/ko/license/A_c_search_view.do", "cpage=1&category=&fromdate=&todate=&firm=&equip=&model_no=&app_no=R-R-pNd-Smartcattoys&maker=&nation=", True, vArr, True)
            htmlString = htmlResult.body.innerHTML
            
            Debug.Print htmlString
            
            End Sub
            
            Function GetHttp(URL As String, Optional formText As String, Optional isWinHttp As Boolean = False, Optional RequestHeader As Variant, Optional includeMeta As Boolean = False) As Object
             
            '###############################################################
            '오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
            '▶ GetHttp 함수
            '▶ 웹에서 데이터를 받아옵니다.
            '▶ 인수 설명
            '_____________URL                   : 데이터를 스크랩할 웹 페이지 주소입니다.
            '_____________formText              : Encoding 된 FormText 형식으로 보내야 할 경우, Send String에 쿼리문을 추가합니다.
            '_____________isWinHttp             : WinHTTP 로 요청할지 여부입니다. Redirect가 필요할 경우 True로 입력하여 WinHttp 요청을 전송합니다.
            '_____________RequestHeader         : RequestHeader를 배열로 입력합니다. 반드시 짝수(한 쌍씩 이루어진) 개수로 입력되어야 합니다.
            '_____________includeMeta           : TRUE 일 경우 HTML 문서위로 ResponseText를 강제 입력합니다. Meta값이 포함되어 HTML이 작성되며 innerText를 사용할 수 없습니다. 기본값은 False 입니다.
            '▶ 사용 예제
            'Dim HtmlResult As Object
            'Set htmlResult = GetHttp("https://www.naver.com")
            'msgbox htmlResult.body.innerHTML
            '###############################################################
             
            Dim oHTMLDoc As Object: Dim objHTTP As Object
            Dim i As Long: Dim blnAgent As Boolean: blnAgent = False
            Dim sUserAgent As String: sUserAgent = "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Mobile Safari/537.36"
             
            Application.DisplayAlerts = False
             
            If Left(URL, 4) <> "http" Then URL = "http://" & URL
             
            Set oHTMLDoc = CreateObject("HtmlFile")
            Set HTMLDoc = CreateObject("HtmlFile")
             
            If isWinHttp = False Then
                Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
            Else
                Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
            End If
             
            objHTTP.setTimeouts 3000, 3000, 3000, 3000
            objHTTP.Open "POST", URL, False
            If Not IsMissing(RequestHeader) Then
                Dim vRequestHeader As Variant
                For Each vRequestHeader In RequestHeader
                    Dim uHeader As Long: Dim Lheader As Long: Dim steps As Long
                    uHeader = UBound(vRequestHeader): Lheader = LBound(vRequestHeader)
                    If (uHeader - Lheader) Mod 2 = 0 Then GetHttp = CVErr(xlValue): Exit Function
                    For i = Lheader To uHeader Step 2
                        If vRequestHeader(i) = "User-Agent" Then blnAgent = True
                        objHTTP.setRequestHeader vRequestHeader(i), vRequestHeader(i + 1)
                    Next
                Next
            End If
            If blnAgent = False Then objHTTP.setRequestHeader "User-Agent", sUserAgent
             
            objHTTP.send formText
             
            If includeMeta = False Then
                With oHTMLDoc
                    .Open
                    .Write objHTTP.responseText
                    .Close
                End With
            Else
                oHTMLDoc.body.innerHTML = objHTTP.responseText
            End If
             
            Set GetHttp = oHTMLDoc
            Set oHTMLDoc = Nothing
            Set objHTTP = Nothing
             
            Application.DisplayAlerts = True
             
            End Function
            

            • 2021-04-25 00:08

              안녕하세요.

              수정된 내용 확인해보니 '검색결과' 페이지의 내용이 맞습니다. 이미 셀레니움으로 해결했지만 나중에 비슷한 상황에서 WinHttp 사용할 때 참고하도록 하겠습니다. 처음엔 Request Header가 없었던 게 문제였을까요.

              끝까지 문제 해결을 위해 애써주셔서 진심으로 감사드립니다.


  • 2021-04-26 09:50

    답변 주신분들 정보 감사합니다.^^


전체 2,913
번호 카테고리 제목 작성자 작성일 추천 조회
2901 VBA
New 다른 시트의 값을 참조하여 원하는 시트에서 검색하여 값을 찾아서 넣고 싶습니다. 첨부파일
안동코비 | 09:00 | 추천 0 | 조회 10
안동코비 09:00 0 10
2900 함수/공식
New 엑셀 KakaoAddress 관련 질문입니다. 첨부파일
구루보 | 08:52 | 추천 0 | 조회 5
구루보 08:52 0 5
2899 함수/공식
New 엑셀 문의드립니다.ㅜㅜ 도와주세요. 첨부파일 (2)
주주난 | 2021.05.06 | 추천 0 | 조회 38
주주난 2021.05.06 0 38
2898 기능/도구
New 엑셀공유파일 셀위치 변경 (3) 답변완료
소람 | 2021.05.06 | 추천 0 | 조회 28
소람 2021.05.06 0 28
2897 VBA
New Worksheet Change (또는 SelectionChange)를 Disable하는 매크로 (주석 처리 말고) (2) 답변완료
나는나 | 2021.05.06 | 추천 0 | 조회 21
나는나 2021.05.06 0 21
2896 함수/공식
New 회사들의 구매이력을 한번에 정리하는 방법 (6) 답변완료
젤리 | 2021.05.06 | 추천 1 | 조회 33
젤리 2021.05.06 1 33
2895 함수/공식
New 열에 날짜(월)를 지정해놓고 비어있으면 표시되도록 가능할까요? 첨부파일
꼬꼭꼬 | 2021.05.06 | 추천 0 | 조회 21
꼬꼭꼬 2021.05.06 0 21
2894 함수/공식
New 엑셀 숫자 사이의 알파벳 O -> 숫자 0으로 변환 (2)
#Su | 2021.05.06 | 추천 0 | 조회 27
#Su 2021.05.06 0 27
2893 VBA
New Update_Cbo 관련 첨부파일
루카스 | 2021.05.06 | 추천 0 | 조회 14
루카스 2021.05.06 0 14
2892 문서서식
New 사진자동넣기 첨부파일 (1)
eende**** | 2021.05.06 | 추천 0 | 조회 45
eende**** 2021.05.06 0 45
2891 함수/공식
New index, match 관련 조언이 필요합니다. (2)
LJH | 2021.05.06 | 추천 0 | 조회 33
LJH 2021.05.06 0 33
2890 함수/공식
New SUMPRODUCT 응용함수 질문 (재업로드) 첨부파일 (3)
ddddj31 | 2021.05.05 | 추천 2 | 조회 38
ddddj31 2021.05.05 2 38
2889 VBA
New 구글링에도 없던데 VBA 크롤링 관련 문의 드립니다. (2)
VBA열공 | 2021.05.05 | 추천 0 | 조회 33
VBA열공 2021.05.05 0 33
2888 피벗테이블
New 안녕하세요. 첨부파일 (4) 답변완료
임종복 | 2021.05.05 | 추천 0 | 조회 31
임종복 2021.05.05 0 31
2887 함수/공식
New 시트별 자료와 값을 연동하는 방법 첨부파일
코이노니아 | 2021.05.05 | 추천 0 | 조회 40
코이노니아 2021.05.05 0 40
2886 피벗테이블
New 해찾기 문제에서 제약식 설정하기 첨부파일
| 2021.05.05 | 추천 0 | 조회 27
2021.05.05 0 27
2885 문서서식
New 표를 그림으로 붙여넣기 시 오류?안나게 하는방법 (2) 답변완료
월마리아 | 2021.05.05 | 추천 0 | 조회 45
월마리아 2021.05.05 0 45
2884 VBA
New 네이버 연관검색 & 부동산 크롤링 프로그램이 갑자기 안됩니다. (1)
꽃가마 | 2021.05.04 | 추천 0 | 조회 25
꽃가마 2021.05.04 0 25
VBA
New Re:네이버 연관검색 & 부동산 크롤링 프로그램이 갑자기 안됩니다.
꽃가마 | 2021.05.04 | 추천 0 | 조회 23
꽃가마 2021.05.04 0 23
2883 함수/공식
New [생산관리] 재고-단품 수량을 수주량에 색상으로 구분 표현 첨부파일 (6) 답변완료
sbrlover | 2021.05.04 | 추천 0 | 조회 62
sbrlover 2021.05.04 0 62
2882 함수/공식
New 달력 업무 일지 자동 입력
한마음 | 2021.05.04 | 추천 0 | 조회 50
한마음 2021.05.04 0 50
2881 피벗테이블
New 해찾기 문제에서 제약식 설정 첨부파일 (2)
| 2021.05.04 | 추천 0 | 조회 26
2021.05.04 0 26
2880 VBA
New 조건에 맞는 행 제거하기 첨부파일 (3)
ArkGie | 2021.05.04 | 추천 0 | 조회 47
ArkGie 2021.05.04 0 47
2879 함수/공식
New 원하는 데이터 추출, 표시하는 방법! (2)
LJH | 2021.05.04 | 추천 0 | 조회 57
LJH 2021.05.04 0 57
2878 함수/공식
금액이 이름과 은행명에 따라 자동으로 입력되는 방법을 알고 싶습니다 첨부파일 (1)
50 | 2021.05.04 | 추천 -2 | 조회 52
50 2021.05.04 -2 52
2877 함수/공식
백분율 관련 공식을 어떻게 작성해야할지 모르겠네요 ㅠㅠ (1)
naver_60889c2ca519d | 2021.05.04 | 추천 0 | 조회 38
naver_60889c2ca519d 2021.05.04 0 38
2876 함수/공식
엑셀 KakaoAddress 관련 질문입니다. (3) 답변완료
구루보 | 2021.05.04 | 추천 0 | 조회 39
구루보 2021.05.04 0 39
2875 함수/공식
GETPIVOTDATA 함수 REF 오류 (3)
미리감사thank | 2021.05.03 | 추천 0 | 조회 33
미리감사thank 2021.05.03 0 33
2874 VBA
[VBA] inputBox 를 통한 제품검색 vlookup 질문입니다. (8)
제펠 | 2021.05.03 | 추천 1 | 조회 43
제펠 2021.05.03 1 43
2873 VBA
안녕하세요 참조에러의 위치를 찾을 수 있을까요? (4)
칭구 | 2021.05.03 | 추천 0 | 조회 49
칭구 2021.05.03 0 49
2872 기능/도구
순환참조 팝업 해결문의 첨부파일 (3)
현정이 | 2021.05.03 | 추천 0 | 조회 41
현정이 2021.05.03 0 41