2023. 2. 13. 09:32ㆍVB.NET/Chrome Browser
여기까지 차근차근 따라오신 분들이라면 이제 티스토리 로그인 정도는 쉽게 구현이 가능할 것이라 생각되지만 그래도 확인차 로그인 과정을 서술해보자.
1. 티스토리 메인페이지 접속
2. 로그인 여부 확인후 로그인이 필요한 경우에만 로그인 실행
3. 아이디/비번 입력창 찾아서 입력
4. 로그인 버튼 클릭
5. 로그인 여부 확인
대충 이정도면 티스토리 로그인이 완료된다. 이 모든 기능은 이전 강좌에 설명한 내용대로 자바스크립트를 실행하고, 자바스크립트와 통신하면 어렵지 않게 구현이 가능하다. 여러 방식으로 구현할 수 있겠지만 이번 강좌에서 로그인의 흐름은 타이머로 조절해 나가도록 해보자. 타이머를 사용하는 이유는 ChromiumWebBrowser가 제공하는 함수들이 Async 방식이기 때문에 실행중인 함수가 끝나야만 값의 반영 여부를 확인할 수 있기 때문이다.
여태까지 연습이었다면 이제는 실전이라는 생각으로 아래 내용을 유심히 살펴보도록 하자.
디자인모드에서 타이머(TimerLogin)를 추가하고 아래 속성으로 툴바에 버튼 1개를 추가하자.
Name | DisplayStyle | Text |
ButtonLogin | Text | &Login |
코딩 완료후 후 실행시켰을때 아래 영상처럼 로그인이 완료되면 성공
자... 이제 위 결과를 만들기 위해 추가한 로그인 버튼의 클릭 이벤트에 소스를 추가하기 전에 TimerLogin의 타이머 먼저 알아보자. 로그인 버튼은 타이머를 발생시키기만 하면 되니 타이머로 프로젝트의 흐름을 제어하는 방법에 대해 자세히 알아보자.
프로젝트에 모듈(ModuleLogin)을 추가하고 해당 모듈에 아래 함수를 추가하자.
Public Sub LoginProc(pGubun As Integer)
If pGubun = 0 Then : LoginProc0() ' 작업준비
ElseIf pGubun = 100 Then : LoginProc100() ' 메인페이지 접속
ElseIf pGubun = 101 Then : LoginProc101() ' 메인페이지 로딩완료 대기
ElseIf pGubun = 200 Then : LoginProc200() ' 로그인 여부 확인용 자바스크립트 실행
ElseIf pGubun = 201 Then : LoginProc201() ' 로그인 여부 확인후 분기
ElseIf pGubun = 300 Then : LoginProc300() ' 로그인 페이지 접속 - 시작하기 클릭
ElseIf pGubun = 301 Then : LoginProc301() ' 로그인 페이지 로딩완료 대기
ElseIf pGubun = 310 Then : LoginProc310() ' 카카오계정 로그인 버튼 클릭
ElseIf pGubun = 311 Then : LoginProc311() ' 카카오계정 로그인 페이지 로딩완료 대기
ElseIf pGubun = 400 Then : LoginProc400() ' 아이디 입력 1 - 클립보드에 복사
ElseIf pGubun = 401 Then : LoginProc401() ' 아이디 입력 2 - 클립보드 붙여넣기
ElseIf pGubun = 402 Then : LoginProc402() ' 아이디 입력 확인 요청
ElseIf pGubun = 403 Then : LoginProc403() ' 아이디 정상입력 확인
ElseIf pGubun = 410 Then : LoginProc410() ' 비밀번호 입력 1 - 클립보드에 복사
ElseIf pGubun = 411 Then : LoginProc411() ' 비밀번호 입력 2 - 클립보드 붙여넣기
ElseIf pGubun = 412 Then : LoginProc412() ' 비밀번호 입력 확인 요청
ElseIf pGubun = 413 Then : LoginProc413() ' 비밀번호 정상입력 확인
ElseIf pGubun = 420 Then : LoginProc420() ' 로그인 버튼 클릭
ElseIf pGubun = 421 Then : LoginProc421() ' 로그인 완료 확인
ElseIf pGubun = 9 Then : LoginProc9() ' 작업 종료
End If
End Sub
위 LoginProc 프로시저는 순차적인 흐름대로 타이머에서 호출하는 프로시저로 일반적인 순서도와 동일한 기능을 하도록 순서도처럼 코딩을 했다. 타이머로 프로젝트를 제어할때는 이런 방식을 사용하는게 가독성이 좋아서 내가 선호하는 방식이고, 웹페이지를 다루는 프로젝트는 주로 이 방식을 사용해서 만들고 있으니 참고하자.
이런식으로 하나의 기능을 하나의 프로시저로 풀어서 코딩하는게 가독성도 좋고, 추후 소스관리에도 좋고, 개발하는데도 더 편리해서 나는 항상 이런 형식으로 코딩하는걸 선호하는 편이다.
여기에서 호출하는 각각의 프로시저들은 분량이 상당하니 몇개 강좌로 떼어서 하나씩 확인해보자. 내용이 어렵지는 않지만 설명을 위해 좀더 풀어서 코딩하다보니 길이가 제법 나오게 됐다. 이후 강좌에서 확인해보기로 하고 여기서는 우선 타이머 발생 이벤트를 보자.
Private Sub TimerLogin_Tick(sender As Object, e As EventArgs) Handles TimerLogin.Tick
TimerLogin.Interval = 100 : TimerLogin.Enabled = False
If Not LoginFg Then : Exit Sub : End If
If LoginGbn <> -1 Then Debug.Print("LoginGbn = " & LoginGbn)
Dim gbn = LoginGbn : LoginGbn = -1 : Call LoginProc(gbn)
RE_TIMER: TimerLogin.Enabled = LoginFg
End Sub
여기도 요소요소에 중요한 내용이 있으니 한줄씩 차근차근 알아보자.
Line 1 : TimerLogin.Interval = 100 : TimerLogin.Enabled = False
예전 타이머 강좌에서 설명한 적이 있는데 타이머는 무조건 시작할때 끄고 시작해야 한다. 안그러면 내 의도와 관계없이 타이머가 돌아서 원치않는 오류가 발생하는 상황을 엄청 자주 경험하게 될것이다. 또 시작시 Interval을 다시 설정하는 이유도 실수를 미연에 방지하기 위함인데 간헐적으로 타이머를 늦게 발생시키려고 할때 Interval을 설정하고, 다음 타이머는 제시간으로 돌아와야 하는데 그걸 놓치는 경우가 많아서 아예 타이머 시작할때마다 재설정해주는게 속편하기 때문이다.
Line 2 : If Not LoginFg Then : Exit Sub : End If
타이머의 동작여부를 설정하는 전역변수(LoginFg)를 설정해서 어디서든 이 플래그를 false로 변경하면 타이머가 중지하도록 한다.
Line 3 : If LoginGbn <> -1 Then Debug.Print("LoginGbn = " & LoginGbn)
디버깅용으로 소스로 현재 어디를 실행하고 있는지 확인용으로 아주 유용한 기능이다.
Line 4 : Dim gbn = LoginGbn : LoginGbn = -1 : Call LoginProc(gbn)
이 줄도 중요한 부분이다. 다루기 어려운 타이머라는 컨트롤을 다루기 쉽게 만들어준다. 타이머는 어떤 이유로든 내가 원치않는 동작을 안하도록 만드는게 가장 큰 관건이다. 구분값에 의해 한번 호출한 프로시저는 다음번 타이머에서 또 호출되면 안된다. 그렇기에 한번 호출되면 구분값을 -1로 변경해서 혹시 다음번에 내 의도와 관계없이 타이머가 호출되더라도 특정 프로시저가 호출되는걸 막아줘야 한다. 그리고, 최종적으로 위의 LoginProc 프로시저를 호출해서 이번 프로젝트의 목표인 티스토리에 로그인하게 된다.
Line 5 : RE_TIMER: TimerLogin.Enabled = LoginFg
Line 1에서 끄고 시작했던 타이머를 여기서 다시 켜준다. 타이머는 항상 껐다가 켜야 오동작을 막을 수 있다.
여기까지 완성됐으니 이제 마지막으로 로그인버튼의 클릭 이벤트를 작성하면 된다.
Sub ButtonLogin_Click(sender As Object, e As EventArgs) Handles ButtonLogin.Click
LoginFg = True
LoginGbn = 0
TimerLogin.Interval = 100 : TimerLogin.Enabled = True
End Sub
Line 1 : LoginFg = True
타이머 플래그를 켜준다.
Line 2 : LoginGbn = 0
최초 타이머를 시작하면 LoginProc0 프로시저를 호출하도록 구분값을 0으로 설정한다.
Line 3 : TimerLogin.Interval = 100 : TimerLogin.Enabled = True
실제 로그인작업을 위해 타이머의 interval을 설정후 타이머를 켜준다.
이번 강좌에서는 타이머에 프로시저에 이것저것 추가된 부분이 많아서 아예 프로젝트를 첨부하니 첨부파일 열어서 확인해보도록 하자.
여기까지는 티스토리에 로그인을 하기위한 환경설정의 개념이었다면 다음번 강좌에서는 실제 티스토리에 로그인을 수행해보도록 하자.
'VB.NET > Chrome Browser' 카테고리의 다른 글
[VB.NET] 차근차근 크롬 브라우저 만들기 - 8. 티스토리 로그인 (2/2) (1) | 2023.02.14 |
---|---|
[VB.NET] 차근차근 크롬 브라우저 만들기 - 6. 페이지 소스 가져오기 (0) | 2023.02.11 |
[VB.NET] 차근차근 크롬 브라우저 만들기 - 5. 자바스크립트와 통신 (1) | 2023.02.10 |
[VB.NET] 차근차근 크롬 브라우저 만들기 - 4. 자바스크립트 실행 (0) | 2023.02.09 |
[VB.NET] 차근차근 크롬 브라우저 만들기 - 3. 기본기능 (0) | 2023.02.08 |