본문 바로가기
SELENIUM/VBA

디지털배움터 반자동 회원가입(selenium)

by 에버리치60 2023. 12. 9.
Sub 신규회원가입()
    Dim 통신사 As String
    Dim 생년월일 As String
    Dim inj As Integer, k As Integer
    Dim auth As String
    Dim ele As Object
    Dim Keys As New Keys
    Dim 결과
    
    결과 = MsgBox("신규 회원가입할 회원구분난에 1 을 입력(한명씩)하고 확인으로 누르시오.", vbOKCancel, "디지털배움터 신규 회원가입")
    If 결과 = 2 Then GoTo 회원가입9
   
    For inj = 3 To Cells(Rows.Count, 8).End(xlUp).Row
        If Cells(inj, 18) = 1 Then GoTo 신규회원가입1
    Next
    GoTo 회원가입9
신규회원가입1:
    Debug.Print inj
    Cells(inj, 18) = 0
    For k = 2 To 10
        If Cells(inj, k) = "" Then
            MsgBox inj & "줄 인적사항를 확인바랍니다."
            Exit Sub
        End If
    Next
    Worksheets("강사정보").Range("B5") = "TRUE"
    Call 크롬드라이버시작
    '회원가입
    Sel.Get "https://k-dcc.or.kr/usr/signup.do"
    
    '일반회원 클래스 나타날때까지 최대 5초 대기
    k = 0
    Do While Sel.FindElementsByClass("btnBg01").Count = 0
            DoEvents
            Sel.Wait 1000
            If k > 5 Then
                Sel.Close
                MsgBox "회원가입 창이 열리지 않습니다" + vbCrLf + "잠시후 다시 시도 해보세요"
                End
            End If
            k = k + 1
    Loop

    '전체동의
    Sel.FindElementByXPath("//*[@id='frm_signup']/div[1]/div[1]/span/label", timeout:=1000, Raise:=False).Click
    Sel.Wait 1000
    
    '---------------------------------------------------------
    Sel.ExecuteScript ("javascript:$('.usrInfoWrap').show();")
    '아이디
    Sel.FindElementById("mem_id").SendKeys ""
    Sel.Wait 500
    Sel.FindElementById("mem_id").SendKeys Cells(inj, 8)
    Sel.Wait 600
    '중복확인
    Sel.FindElementByXPath("//*[@id='frm_signup']/div[6]/div[2]/table/tbody/tr[1]/td/div/button", timeout:=1000, Raise:=False).Click
    Sel.Wait 400
    Sel.SwitchToAlert.Accept
    Sel.Wait 600
    '비밀번호
    Sel.FindElementById("mem_pwd").SendKeys ""
    Sel.Wait 500
    Sel.FindElementById("mem_pwd").SendKeys Cells(inj, 9)
    Sel.Wait 600
    '비밀번호확인
    Sel.FindElementById("re_mem_pwd").SendKeys ""
    Sel.Wait 500
    Sel.FindElementById("re_mem_pwd").SendKeys Cells(inj, 9)
    Sel.Wait 600
    '이름
    Sel.FindElementById("mem_nm").SendKeys Cells(inj, 2)
    Sel.Wait 600
    '이메일
    Sel.FindElementById("mem_email_1").SendKeys ""
    Sel.Wait 600
    Sel.FindElementById("mem_email_1").SendKeys Cells(inj, 8)
    Sel.Wait 600
    Sel.FindElementById("mem_email_2").AsSelect.SelectByText ("gmail.com")
    Sel.Wait 600
    '직업선택
    Sel.FindElementById("job_cd").AsSelect.SelectByText ("무직")
    Sel.Wait 500
    '고령체크  //*[@id="chk_vgs_cd_V04"]
    Sel.FindElementByXPath("//*[@id='chk_vgs_cd_V04']", timeout:=1000, Raise:=False).Click
    Sel.Wait 600
    Sel.ExecuteScript ("javascript:$('.usrInfoWrap').hide();")
    '---------------------------------------------------------

    '일반회원 //*[@id="frm_signup"]/div[2]/button[1]
    Sel.FindElementByXPath("//*[@id='frm_signup']/div[2]/button[1]", timeout:=1000, Raise:=False).Click
    '휴대폰인증
    Sel.FindElementByXPath("//*[@id='frm_signup']/div[3]/div[1]/div/button", timeout:=1000, Raise:=False).Click
    Sel.Wait 500
    통신사 = Cells(inj, 6)
    Sel.SwitchToNextWindow
    'Debug.Print Sel.Window.Title + " " + 통신사
    Sel.Wait 800
    Select Case 통신사
        Case "sk"
            'Sel.FindElementByXPath("//*[@id='ct']/fieldset/ul[1]/li[1]/label", timeout:=1000, Raise:=False).Click
            Sel.FindElementByXPath("//*[@id='ct']/fieldset/ul[1]/li[1]", timeout:=1000, Raise:=False).Click
        Case "kt"
            'Sel.FindElementByXPath("//*[@id='ct']/fieldset/ul[1]/li[2]/label", timeout:=1000, Raise:=False).Click
            Sel.FindElementByXPath("//*[@id='ct']/fieldset/ul[1]/li[2]", timeout:=1000, Raise:=False).Click
        Case "lg"
            'Sel.FindElementByXPath("//*[@id='ct']/fieldset/ul[1]/li[3]/label", timeout:=1000, Raise:=False).Click
            Sel.FindElementByXPath("//*[@id='ct']/fieldset/ul[1]/li[3]", timeout:=1000, Raise:=False).Click
        Case "skal"
            Call 알뜰폰("SKT")
        Case "ktal"
            Call 알뜰폰("KT")
        Case "lgal"
            Call 알뜰폰("LGU+")
        Case Else
            Sel.Close
            Sel.SwitchToPreviousWindow
            Sel.Close
            MsgBox "통신사를 입력한 후 다시 시도 해보세요"
            End
    End Select
    Sel.Wait 500
    '전체동의
    Sel.FindElementByXPath("//*[@id='ct']/fieldset/ul[2]/li/span/label[2]", timeout:=1000, Raise:=False).Click
    Sel.Wait 400
    '문자(SMS)인증
    Sel.FindElementByXPath("//*[@id='btnSms']", timeout:=1000, Raise:=False).Click
    Sel.Wait 900
    Sel.FindElementById("username").SendKeys Cells(inj, 2)
    Sel.Wait 600
    '생년월일
    생년월일 = LTrim(Str(Cells(inj, 3)))
    Sel.FindElementById("mynum1").SendKeys ""
    Sel.Wait 500
    For k = 0 To Len(생년월일)
        Sel.FindElementById("mynum1").SendKeys Mid(생년월일, k + 1, 1)
        Sel.Wait 50
    Next k
    Sel.Wait 400
    '남녀
    Sel.FindElementById("mynum2").SendKeys ""
    Sel.Wait 500
    '주민뒷 첫자리
    Sel.FindElementById("mynum2").SendKeys Cells(inj, 4)
    Sel.Wait 400
    Sel.FindElementById("mobileno").SendKeys ""
    Sel.Wait 500

 

 

 

'휴대폰번호 세팅
    Sel.FindElementById("mobileno").SendKeys Cells(inj, 7)
    Sel.Wait 500
    Sel.ExecuteScript ("javascript:window.scrollBy(0,1000)")
    '보안문자입력
    Sel.FindElementById("answer").SendKeys ""
    '보안문자 수동입력하고
    k = 0
    Do
            DoEvents
            Sel.Wait 1000
            If k > 60 Then
                Sel.Close
                MsgBox "CAPTCHA 문자입력 시간초과" + vbCrLf + "잠시후 다시 시도 해보세요"
                End
            End If
            k = k + 1
            auth = Sel.FindElementById("answer").Value
            'Debug.Print auth
    Loop Until Len(auth) = 6
    Sel.Wait 400

    '확인버튼
    Sel.FindElementByXPath("//*[@id='btnSubmit']", timeout:=1000, Raise:=False).Click
    Sel.Wait 1000
    k = 0
    Do
            DoEvents
            Sel.Wait 1000
            If k > 120 Then
                Sel.Close
                MsgBox "문자메시지 6자리 숫자 입력시간 초과" + vbCrLf + "잠시후 다시 시도 해보세요"
                End
            End If
            k = k + 1
            auth = Sel.FindElementById("authnumber").Value
            'Debug.Print auth
    Loop Until Len(auth) = 6

    '확인
    Sel.FindElementByXPath("//*[@id='btnSubmit']", timeout:=1500, Raise:=False).Click
    Sel.Wait 700
    
    Sel.SetClipBoard Cells(inj, 10)
    '우편번호버튼
    'Sel.ExecuteScript ("javascript:fc_popZipAddr()")
    ''Sel.FindElementByXPath("//*[@id='frm_signup']/div[6]/div[4]/table/tbody/tr[2]/td/div/div/button", timeout:=1000, Raise:=False).Click
    ''Sel.Wait 1000
    '주소찾기창
    ''Sel.FindElementById("keyword").SendKeys Worksheets("회원가입").Range("I2")
    
   
    'Sel.Wait 400
    '회원가입버튼 //*[@id="frm_signup"]/div[6]/div[9]/button[1]
회원가입9:
    Range("L1") = 1
End Sub
Sub 알뜰폰(hp As String)
    'Sel.FindElementByXPath("//*[@id='ct']/fieldset/ul[1]/li[4]/label", timeout:=1000, Raise:=False).Click
    Sel.FindElementByXPath("//*[@id='ct']/fieldset/ul[1]/li[4]", timeout:=1000, Raise:=False).Click
    Sel.Wait 400
    Sel.FindElementByXPath("//*[@id='" & hp & "']", timeout:=1000, Raise:=False).Click
    Sel.Wait 300
    '선택버튼
    Sel.FindElementByXPath("//*[@id='mvnoLayerCheck']", timeout:=1000, Raise:=False).Click
End Sub