2015년 8월 13일 목요일

셀레니움(selenium)을 통한 인스타그램 자동 로그인 예제

편리한 웹 어플리케이션 테스팅 프레임워크(framework)인 셀레니움(selenium)을 통해서,
인스타그램 페이지에 자동 로그인 하는 예제를 다룬다.

일반적으로 크라울링(수집) 할때, 주소(url)에 의한 질의(Request)와 응답(Response) 이라는 단순한 패턴을 통해서 이루어진다. 하지만, 로그인과 같은 정보 제출(submit) 패턴을 만나면 난감해 진다.
이때, 셀레니움은 어려움에 처한 당신에게 구원에 손길을 제공할 것이고, 겸허한 마음으로 그 손길을 잡으면, 신세계를 경험할 수 있을 것이다.

예제는 인스타그램에 로그인 하는 패턴의 코드와 호출하는 과정을 담았다.
그리고, 수행 및 구동하는 화면을 캡처링 해 보았다.

참고 : http://www.seleniumhq.org

인스타그램 로그인 클래스 작성

In [2]:
from selenium import webdriver
#from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
import time

class instagram():
    def __init__(self):
        self.drv = webdriver.Firefox()
        self.drv.get('https://instagram.com')
    
    def login(self):
        drv = self.drv
        
        # 로그인 화면으로 전환하기,
        lo_login_button = WebDriverWait(driver=drv,timeout=10) \
            .until(lambda drv: drv.find_element_by_xpath("//a[contains(@href,'/login')]"))
        lo_login_button.click()
        time.sleep(3)
        
        # 로그인 정보 입력하기,
        lo_user = WebDriverWait(driver=drv,timeout=10) \
            .until(lambda drv: drv.find_element_by_xpath("//input[@name='username']"))
        lo_user.send_keys(g_username)
        lo_pass = WebDriverWait(driver=drv,timeout=10) \
            .until(lambda drv: drv.find_element_by_xpath("//input[@name='password']"))
        lo_pass.send_keys(g_password)
        time.sleep(3)
        
        # 로그인 하기,
        lo_login_submit = WebDriverWait(driver=drv,timeout=10) \
            .until(lambda drv: drv.find_element_by_xpath("//button[@tabindex='3']"))
        lo_login_submit.click()
        
        time.sleep(5)

수행하기

In [3]:
# 클래스 로딩
firefox = instagram()
# 로그인 액션 수행
firefox.login()
In [4]:
# 종료
firefox.drv.quit()

수행 화면 보기


코드 중에 g_username과 g_password는 (짐작하는 바와 같이) 본인의 개인 계정을 입력하면 된다.

자료 작성 중에 문득 이런 생각이 들었다.
프락시와 셀레니움 조합으로 광고 클릭 수를 늘릴 수 있을까? 구글은 어떤 방식으로 봇을 막고 있을까?

0 개의 댓글:

댓글 쓰기