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

[심화방] VBA_심화_100제 #7 [ 셀레니움 자동화 ]

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

이번에 해볼것은 샵플링사이트에서 팝업을 없애고

15일 무료체험을 클릭한후 각각의 이용약관에 동의를 하고 개인정보를 입력 후 일반 회원가입 버튼에 마우스를 위치하여 호버링 상태까지 이뤄지는 셀레니움 자동화를 해보려 한다.

 

뭔가 복잡해 보이지만 그냥 회원가입하는 일련의 과정을 자동화하려고 한다고 생각하면 된다.

 

Sel.ExecuteScript "document.querySelector(""div.layer_popup_area"").style.display = 'none';"

자바스크립트로 팝업숨기기 / 물론 셀레니움으로 요소를 클릭해서 닫아도 된다.

 

15일 무료체험은 Class 명이 btn_box인데 이게 여러개여서 자식태그들의 인덱스를 찾아서 해야하는데 본인은 이번에

요소안에 있는 텍스트인 [15일 무료체험]을 가지고 있는 요소를 찾아 클릭을 하여 다음 링크로 넘어가보도록 하였다.

Sel.FindElementByLinkText("15일 무료체험").Click

FindElementByLinkText는 텍스트값이 정확하게 일치한 요소를 찾아가기에 반드시 오타를 체크하여야 한다.

약관 동의는  각각의 id값으로 요소를 찾아 선택하도록 하였다.

Sel.FindElementByCss("#agree11").Click           
Sel.FindElementByCss("#agree21").Click

사업자 정보란을 넣기 위해서는 input 태그중에 name속성에 고유값들이 있기 때문에 그것을 이용하여 값을 넣어보았다.

Sel.ExecuteScript "arguments[0].value ='엑셀을 사랑하는 남자'", Sel.FindElementByCss("input[name=""cmpy_nm""]")
Sel.ExecuteScript "arguments[0].value ='엑사남'", Sel.FindElementByCss("input[name=""ceo_nm""]")
Sel.FindElementByCss("input[name=""biz_no_1""]").SendKeys 123

보통은 3번처럼 sendkeys를 이용하여 값을 넣으니 VBA 자바스크립트 제어의 공부목적이 아니면 sendkeys로 입력폼을 완성하는게 맞다고 본다.

마지막으로 회원가입을 클릭하는 코드를 넣으면 되는데..

이번에는 가입목적이 아니기 때문에 마우스를 버튼 위에 올려놓은 호버링 상태가 되는것을 구현하였다.

Sel.FindElementByPartialLinkText("일반 회원").ReleaseMouse

위에서 설명한 FindElementByLinkText와는 달리 FindElementByPartialLinkText는 텍스트의 일부분만 일치하면 해당 요소를 찾아가게 된다.  ReleaseMouse 는 해당요소에 마우스를 위치시켜서 Hover상태로 놓이게 된다.

더보기
Sub 셀레니움자동화()
    
    Dim Strurl$
        
        Strurl = "https://www.shopling.co.kr/"              '= 샵플링사이트
        Sel.Timeouts.ImplicitWait = 1000                    '= 암묵적으로 1초 정도 딜레이
        
        Sel.AddArgument "--start-maximized"                 '= 최대화
        Sel.Start "chrome"                                  '= 크롬으로 진행
        Sel.Get Strurl                                      '= 접속시작
       
       
        Sel.Wait 1000
   
        Sel.ExecuteScript "document.querySelector(""div.layer_popup_area"").style.display = 'none';"
                                                            '= 팝업 숨기기
                                                            
        Sel.FindElementByLinkText("15일 무료체험").Click     '= 텍스트로 요소찾기 / 정확해야 함
        Sel.FindElementByCss("#agree11").Click              '= 동의 체크
        Sel.FindElementByCss("#agree21").Click              '= 동의 체크
        
        Sel.Wait 1000
       
       '= sendkeys로 바로 값을 넣어도 되고 / 자바스크립트를 이용해서 넣어도 된다.
       
        Sel.ExecuteScript "arguments[0].value ='엑셀을 사랑하는 남자'", Sel.FindElementByCss("input[name=""cmpy_nm""]")
       '= arguments[0] 첫 배열에 "input[name=""cmpy_nm""]" 에 해당 value를 넣겠다는 뜻
       
        Sel.ExecuteScript "arguments[0].value ='엑사남'", Sel.FindElementByCss("input[name=""ceo_nm""]")
        Sel.FindElementByCss("input[name=""biz_no_1""]").SendKeys 123
        
        Sel.Wait 1000
        Sel.FindElementByPartialLinkText("일반 회원").ReleaseMouse  '= 텍스트로 요소찾기 / 일부분만 일치해도 됨
                                                                   '= 마우스를 hover 상태로 둠
        
       
End Sub

 

하나하나 뜯어가며 설명을 했으니..샵플링 사이트 말고 다른 사이트에서 요소들을 하나씩 뜯어가며 연습하길 바란다.

전에도 이야기했듯이 Css선택자를 공부하면 조금더 편하게  Css선택자를 추려낼 수 있으니 공부에 매진하길 바란다.

 

여기는 셀레니움 코드 맛집@@

 

셀레니움 자동화.xlsm
0.02MB

댓글