셀레니움 브라우저선택하기

VBA
작성자
나야
작성일
2022-06-09 13:04
조회
61
엑셀버전 : 엑셀2010 이전

운영체제 : 윈도우10

AppActivate Application.Caption으로 브라우저에서 엑셀이 선택되면서Application.SendKeys들이 엑셀창에서 실행됩니다.

다시 브라우저로 돌아갈려면 어떻게 해야할까요?

브라우저 종류후 재실행하면 시간이 더 걸립니다.

 

 

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Dim blnX As Boolean

Sub Stop_()
blnX = True
End Sub

Sub 조회()
Dim Egb As New Selenium.WebDriver
Dim ele As WebElement
Dim count As Integer
' Dim Keys As New Selenium.Keys
Dim rAry As Range
Dim k As Long
Dim i As Integer
Dim j As Integer
Dim iTime As Integer
Dim a As Variant
Dim iR As Integer, iC As Integer, iOff As Integer

blnX = False
On Error GoTo g1
Application.Calculation = xlCalculationManual '수동
' Egb.AddArgument ("headless") '숨기기

Egb.Start "Chrome"
Egb.Wait (2000)
Egb.Get "http://kras.gwangju.go.kr/land_info/info/landprice/landprice.do" '광주

For i = Range("q3") To Range("r3")
If blnX = True Then End
Egb.FindElementByCss("select[name='sggnm']").SendKeys Range("a" & i) '구
Egb.Wait (500)
Egb.FindElementByCss("select[name='umdnm']").SendKeys Range("b" & i) '동
Egb.Wait (500)

Egb.FindElementByCss("input[title='본번']").SendKeys Range("c" & i) '본번

Egb.Wait (500)
Application.SendKeys "{tab}" '부번선택
Egb.SendKeys Range("d" & i) '부번입력
Egb.Wait (500)
Application.SendKeys "{tab}" '입력선택
Egb.Wait (500)
SendKeys "{enter}", True '입력누름
'Egb.FindElementByCss("element_test").SendKeys Keys.Enter '//Keys.TAB, Keys.CONTROL, "v"
Egb.Wait (2000)

For Each td In Egb.FindElementsByCss(".table0202 tr:nth-of-type(2) td")
Cells(i, u + 5) = td.Text
u = u + 1
Next
u = 0
Egb.Wait (1000)

Egb.FindElementByCss("input[title='본번']").Clear '자료삭제
Egb.Wait (500)
Application.SendKeys "{tab}" '부번선택
Egb.Wait (500)
Application.SendKeys "{bs}" '부번삭제
Egb.Wait (500)
Application.SendKeys "{bs}" '부번삭제
AppActivate Application.Caption'엑셀창
DoEvents
Next

Egb.Close
Set Egb = Nothing
g1:

Application.Calculation = xlCalculationAutomatic '자동
End Sub

전체 2

  • 2022-06-10 04:49

    @나야 님 AppActivate는 이런 식으로 사용하시면 됩니다.

    AppActivate "셀레니움 브라우저선택하기 - 오빠두엑셀 - Chrome"
    AppActivate Title:=ThisWorkbook.Application.Caption

    윈도우 타이틀을 정확히 안다면 위와 같이 간단하게 써도 됩니다.

    currentWindow = bot.Send("GET", "/window_handle")
    bot.SwitchToWindowByName currentWindow

    윈도우 핸들을 변수에 담아서 필요할 때 다시 해당 윈도우로 이동하는 것도 가능합니다. 만약 새 창으로 바로 이동(팝업창처럼)해야 하는 경우 포커싱을 해야할 때 SwitchToNextWindow, SwitchToPreviousWindow 이렇게 창 전환도 가능합니다.

    그런데 오히려 제가 궁금한 건, 엑셀 VBA에서 Selenium을 이용해 브라우저를 컨트롤하는데 굳이 포커스를 브라우저로 이동시키는 동작이 필요할까, 입니다. VBA가 일종의 컨트롤 타워여서 브라우저의 내용을 크롤링/파싱해서 엑셀에 출력하고, 엑셀의 값을 브라우저의 input이나 text 필드로 보내는 것 다 가능한데요. 문제가 어렵고 복잡해지는 이유가 Application.SendKeys를 쓰는 것 때문이라는 짐작이 갑니다. 이 메서드를 쓰려면 반드시 해당 윈도우로 포커싱을 해야 하기 때문이지요. 하지만 브라우저와 엑셀 간이라면 Application.SendKeys를 사용하지 않고 자유롭게, 심지어 창을 화면에서 아예 내려놓고 백그라운드에서도 키 입력과 클릭이 다 가능하거든요. 굳이 창 전환이라는 게 필요가 없어 보입니다. 오히려 사이트 내에서 iframe을 사용한 경우 Element를 찾기 위해서는 frame 전환이 필요하지만요. Application.SendKeys 의존도를 좀 낮추는 방법을 찾으시는 게 좋을 것 같습니다. 브라우저가 아닌 다른 프로그램의 컨트롤이나 Text Area에 VBA로 접근해야 할 경우 Window Handle을 찾아서(Window API 활용) 포커싱을 해야 하는데, Application.SendKeys는 가급적 이런 제한된 경우, VBA에서 직접 제어가 어려운 경우에 한해 사용해 보시길 권해드립니다.

    Public Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
    
    예시)
        Dim ihwnd As Long
        ihwnd = FindWindow("IEFrame", vbNullString) '//ahk_class 클래스네임으로 창 찾기 (타이틀은 일부 불가, 완전일치)
        
        Do Until ihwnd = 0
            Call SetForegroundWindow(ihwnd)
            delay 2
            Application.SendKeys "%{F4}"
            delay 2
            ihwnd = FindWindow("IEFrame", vbNullString) '//타이틀을 검색하지 않으려면 vbNullString, 타이틀인 비어있는 창은 ""
        Loop

     


    • 2022-06-10 08:46

      @나는나 님 감사합니다 잘해결해볼게요


전체 6,851
번호 카테고리 제목 작성자 작성일 추천 조회
알림
📌 -- VBA 기초-활용 4주 완성, 특별 스터디 모집을 시작합니다! ~7/8(금) 까지 -- 📌 (89)
오빠두엑셀 | 2022.06.23 | 추천 101 | 조회 15578
오빠두엑셀 2022.06.23 101 15578
공지사항 함수/공식
⭐ [더 나은 커뮤니티 문화를 위한 Q&A 글 작성 규칙] ⭐ (79)
오빠두엑셀 | 2021.10.28 | 추천 95 | 조회 5319
오빠두엑셀 2021.10.28 95 5319
38370 VBA
New 행에 마지막 입력값 삭제하는 방법 문의 드림니다. 첨부파일 (1)
033cola | 17:36 | 추천 0 | 조회 13
033cola 17:36 0 13
38356 VBA
New VBA 또는 매크로 사용하여 시트1의 원한는 내용만 시트2에 표기하는 스크립트 문의 합니다. 엑셀파일첨부파일
파란맥 | 16:30 | 추천 1 | 조회 15
파란맥 16:30 1 15
38287 VBA
New VBA 범위 입력 소스 문의 합니다. (6) 답변완료
파란맥 | 08:36 | 추천 1 | 조회 39
파란맥 08:36 1 39
38284 기능/도구
New 엑셀 여러가지파일 탭으로 보기 첨부파일
asfdadfs | 08:18 | 추천 -1 | 조회 27
asfdadfs 08:18 -1 27
38260 파워쿼리/피벗
New 청사 출입기록을 월별, 인원별로 정리하고 싶은데 선배님들 조언을 구합니다. 엑셀파일첨부파일
비에리 | 03:30 | 추천 0 | 조회 22
비에리 03:30 0 22
38258 VBA
New 기준열과 동일하게 셀병합 하는 vba 엑셀파일첨부파일 (2)
007 | 02:10 | 추천 0 | 조회 39
007 02:10 0 39
38251 함수/공식
New 엑셀 다중조건으로 다른시트에 추출후 수정해서 원본시트에 업데이트방법? 엑셀파일
제임스딘 | 00:33 | 추천 0 | 조회 25
제임스딘 00:33 0 25
38197 VBA
New VBA 매크로 SelectionChange 명령문(스크립트) 조언 받고자 합니다. 엑셀파일첨부파일 (2) 답변완료
파란맥 | 2022.07.01 | 추천 0 | 조회 22
파란맥 2022.07.01 0 22
38191 함수/공식
New 특정 텍스트만 추출하는 함수에서.. (1) 답변완료
최사무엘 | 2022.07.01 | 추천 0 | 조회 25
최사무엘 2022.07.01 0 25
38187 기능/도구
New 엑린이] 시트값을 자동으로 불러오고 싶습니다 (1)
세잎 | 2022.07.01 | 추천 0 | 조회 26
세잎 2022.07.01 0 26
38183 VBA
New VBA 매크로 SelectionChange 명령문 조언 받고자 합니다. 엑셀파일첨부파일 (7) 답변완료
파란맥 | 2022.07.01 | 추천 1 | 조회 36
파란맥 2022.07.01 1 36
38182 함수/공식
New FILTER함수 사용시에 함수가 안먹히는 문제 첨부파일 (1)
엑셀고수되는방법좀 | 2022.07.01 | 추천 0 | 조회 23
엑셀고수되는방법좀 2022.07.01 0 23
38177 함수/공식
New 값을 찾아 가져오고 싶습니다. 엑셀파일 (1)
땅콩바라기 | 2022.07.01 | 추천 0 | 조회 18
땅콩바라기 2022.07.01 0 18
38175 문서서식
New 핸드폰 번호 서식을 통일 시키고 싶습니다... (2)
qwerty | 2022.07.01 | 추천 0 | 조회 19
qwerty 2022.07.01 0 19
38154 함수/공식
New 재고파일을 만들고 있는데 수식이.. ㅠㅠ 엑셀파일 (1)
최사무엘 | 2022.07.01 | 추천 -1 | 조회 38
최사무엘 2022.07.01 -1 38
38152 VBA
New Sharepoint에 있는 파일에서 ADODB를 이용해 데이터 추출시 에러 발생하는데, 해결방법에 대해 도움 부탁 드립니다 (3) 답변완료
Jas | 2022.07.01 | 추천 0 | 조회 21
Jas 2022.07.01 0 21
38150 함수/공식
New MATCH함수 문의 엑셀파일첨부파일 (1) 답변완료
땅콩바라기 | 2022.07.01 | 추천 0 | 조회 21
땅콩바라기 2022.07.01 0 21
38149 함수/공식
New 번호 매기기 원하는 "0" 제외하고 번호 매기기 ~ 고수님 부탁드립니다. (4) 답변완료
kwt**** | 2022.07.01 | 추천 0 | 조회 17
kwt**** 2022.07.01 0 17
38148 함수/공식
New 선생님들 엑셀 너무 어렵습니다. 알려주세요. ㅠㅠ 첨부파일 (3)
석고데생 | 2022.07.01 | 추천 -1 | 조회 26
석고데생 2022.07.01 -1 26
38129 함수/공식
New 재고 관리에서 악성재고를 추려내고자 하는데.... (3) 답변완료
최사무엘 | 2022.07.01 | 추천 -2 | 조회 41
최사무엘 2022.07.01 -2 41
38122 VBA
New if 문에서 A=B or C or D의 표현 방법이 무엇인가요? (2)
kimki**** | 2022.07.01 | 추천 0 | 조회 26
kimki**** 2022.07.01 0 26
38105 VBA
New 엑셀 파일내 모든 테두리선 일괄변경 관련
엑셀고수를향해 | 2022.07.01 | 추천 -1 | 조회 30
엑셀고수를향해 2022.07.01 -1 30
38097 함수/공식
New 뒤자리 0을 없에는 함수을 알고 싶어요? 첨부파일 (4) 답변완료
포카라 | 2022.07.01 | 추천 0 | 조회 32
포카라 2022.07.01 0 32
38093 문서서식
New [질문] 숫자 123... 을 하나둘셋 으로 표기 하는 법 (2)
티엠프이 | 2022.07.01 | 추천 0 | 조회 23
티엠프이 2022.07.01 0 23
38091 함수/공식
New 도와주세요ㅜㅜ 값을 찾아서 가져오고 싶습니다. 엑셀파일 (4) 답변완료
땅콩바라기 | 2022.07.01 | 추천 0 | 조회 28
땅콩바라기 2022.07.01 0 28
38020 VBA
New VBA 클리어 사용하여 특정 셀만 지우고자 합니다. 첨부파일 (3) 답변완료
파란맥 | 2022.07.01 | 추천 0 | 조회 28
파란맥 2022.07.01 0 28
37986 VBA
New VBA로 생성된 두 개의 피벗 테이블 슬라이서 연동 첨부파일 (4)
라바 | 2022.06.30 | 추천 0 | 조회 23
라바 2022.06.30 0 23
37955 VBA
New 각 조합 별 중복사용자 수 추출방법 알려주실분.. 엑셀파일 (1)
윤썽 | 2022.06.30 | 추천 0 | 조회 31
윤썽 2022.06.30 0 31
37804 함수/공식
New 문의합니다) 조건부 서식 채우기 첨부파일 (2) 답변완료
파란맥 | 2022.06.30 | 추천 0 | 조회 50
파란맥 2022.06.30 0 50
37779 문서서식
New 조건부서식으로 글자크기 변경 (2) 답변완료
엑셀초보랍니다 | 2022.06.30 | 추천 0 | 조회 32
엑셀초보랍니다 2022.06.30 0 32