본문 바로가기

Autohotkey강좌

Autohotkey#28, Selenium을 이용한 웹크롤링 1단계 : 사이트 자동 로그인, Crawling 1st step : Site Login automatically

반응형

youtu.be/MTBt71d8Seo

autohotkey를 이용한 crawling을 요청하신 구독자분이 계신데, 정치적인 댓글공방등도 있고 해서 좀 조심스럽긴 합니다. 그럼에도 불구하고 기본적인 내용은 소개시켜도 되지 않을까 싶어서 준비를 하는데 시간이 좀 걸렸습니다. 저도 디버깅하는데 애를 먹어서 지연된점 양해 말씀 드립니다.
어쨋든, crawling관련해서 역시 대세는 Python입니다. Selenium이나 기타 제반 라이브러리가 풍부하기 때문이죠. 그럼에도 불구하고 어떤 이유로 인해서 autohotkey로 구현이 필요하셔서 요청하신 것이라 생각합니다. 그렇지만 autohotkey에서도 직접적으로 브라우저 제어를 하지 않고, Selenium을 이용하는게 일반적으로 보여집니다. 그래서 저희도  Selenium Basic을 이용하는 것으로 진행하겠습니다.

1) 먼저 Selenium Basic을 여기(github.com/florentbr/SeleniumBasic/releases )에서 설치하세요.  

2) 그리고 본인이 사용하는 브라우저에 맞는 driver를 다운로드 하세요.

  - Chrome driver : sites.google.com/a/chromium.org/chromedriver/downloads

  - Opera driver : github.com/operasoftware/operachromiumdriver/releases

  - Firefox driver :github.com/mozilla/geckodriver/releases

  - IE Driver : selenium-release.storage.googleapis.com/index.html

 

  본인 컴퓨터에 설치된 브라우저의 버전에 맞는 driver를 설치해야 합니다. 이게 맞지 않으면 동작하지 않으므로 반드시 브라우저 버전과 일치시키고 이후 진행하시기 바랍니다.
3) 이제 Selenium을 사용할 준비가 되었습니다.
   간단히 크롬 브라우저에서 특정 사이트에 로그인 하는 예제를 진행해 보겠습니다.
   
   먼저 익혀야 하는 것은 브라우저에서 특정 항목을 찾는 방법입니다.
   크롬의 경우 크롬창을 마우스 우측  클릭하면 맨 마지막에 검사라는 항목이 있습니다. 
   (Opera/IE의 경우 "요소검사", )
   검사 항목이 뜬 상태에서 해당 창의 좌상단의 화살표를 클릭하고서 좌측 브라우저 화면에서 특정 항목을 클릭하면 해당 항목 내용을 소스에서 보여줍니다. 그러면 해당 항목의 ID, name, class등을 확인하고 가급적 다른 항목과 겹치지 않는 ID나 name등을 선택해서 호출해 주면 됩니다.
   예를 들어 login id와 password항목을 읽어 오려면 어떻게 하면 될지 경기도 지식사이트(www.gseek.kr) 에서 확인해 보겠습니다.
   지식사이트에서 로그인을 누르면 화면이 변경이 되는데, 그 상태에서 마우스 우클릭하여 검사를 띄우고 ID와 PASSWORD를 눌러서 항목을 확인합니다.
   ID의 경우 다음과 같고
  <input type="text" id="memberNo" name="memberNo" data-required="true" title="아이디" placeholder="이메일을 입력해주세요." class="required">
   Password의 경우 다음과 같습니다.
  <input type="password" id="password" name="password" class="pw required" data-required="true" title="비밀번호" placeholder="비밀번호를 입력해주세요.">
  id나 name가 모두 동일한 이름이므로 아무것이나 선택해도 됩니다.
  
4) 이제 본격적으로 브라우저를 여는 작업부터 진행해야 합니다.
   우리는 크롬으로 한다고 했으므로 아래 문장처럼 브라우저를 지정하고 ComObjCreate()를 호출해 주면 됩니다.

    SiteUrl := "www.gseek.kr"

    browser := "Selenium.ChromeDriver"
    driver := ComObjCreate(browser)

    driver.Get(SiteUrl)

   만약 브라우저가 달라진다면 다르게 불러야 합니다.
browser := "Selenium.FirefoxDriver" ; Firefox경우
browser := "Selenium.OperaDriver"   ; Opera경우
browser := "Selenium.IEDriver" ; IE경우

크롬브라우저와 크롬드라이버의 버전이 맞다면 문제없이 열립니다.

5) 해당 사이트 내용이 정상적으로 로드되면, 우리는 아까 찾은 id와 password를 자동으로 넣어줘야겠죠.
ID := "사용자ID"
Password := "비밀번호"
driver.findElementsByName("memberNo").item[1].SendKeys(ID)
driver.findElementsByName("password").item[1].SendKeys(Password)

입력을 모두 했다면 이제 로그인 버튼을 클릭해 줘야 합니다.
검사창이 떠 있는 상황에서 로그인 버튼을 확인하면 다음과 같습니다.

<a href="javascript:;" id="aLogin" class="btn_button btn_bg w180 ta_w340 h50 ta_h90 bg_blue radius50 color_white fz16 fw500">로그인</a>

이번에는 class로 읽고 click을 진행할 수 있도록 합니다.
driver.FindElementByClass("btn_button").Click

동작이 정확하다면 로그인 동작이 완료됩니다.

이상으로 오토핫키와 selenium을 조합하여 특정 사이트에 로그인하는 것을 진행했습니다.

물론 모든 사이트가 저대로 동작하지 않을 수 있습니다.
하지만 일반적인 경우는 이와 유사하게 동작합니다.
나쁜 방향으로만 이용하지 않고, 좋은 방향으로만 활용하시기를 기대합니다.
다음 시간에는 특정 항목을 읽어 오는 것을 진행하겠습니다.

 

sele_chrome_login.ahk
0.00MB

반응형