[Python] 네이버 매크로 selenium 본문

프로그래밍/Python

[Python] 네이버 매크로 selenium

디유비 2020. 6. 1. 01:01

네이버에서 xx을 예약을 하기 위해 매크로를 만들다가 한 번 올려봐야겠다는 생각을 했다.

 

그러면서 한편으로는.. 개발자 분들은 이런 매크로 막으려고 고생이 많으시겠구나. 생각이 들었습니다요. 지송합니다요.

 

부르트 포스로 서버 부하 걸리지 않게 패킷은 한 번만 짧게 보내는 것으로 할게요.

 

selenium이라는 모듈을 사용하면 아주 아주 편하다.

 

여러 브라우저의 WebDriver API를 제공하는데 나는 크롬을 주로 쓰니까 크롬으로 해보자.

 

우선 크롬 웹 드라이버를 다운로드한다.

https://chromedriver.chromium.org/downloads

 

자신의 컴퓨터에 깔린 크롬과 버전이 동일한 웹 드라이버를 받아야 하는데 현재 자신의 크롬 버전을 알려면

[크롬 -> 환경설정 -> Chrome 정보]로 확인하면 된다.

 

버전에 맞는 크롬 드라이버를 받았으면 파이썬을 설치한 경로에 bin 디렉터리 안에 넣어 주면 된다.

 

그럼 이제 본격적으로 코드 작성을 해보자

#!/usr/bin/env python3
# -*- coding: utf8 -*-

from selenium import webdriver

웹 드라이버 임포트부터 한다.

driver = webdriver.Chrome('chromedriver')
driver.execute_script('window.open("about:blank, _blank");')

login(driver)

타이밍을 맞추기 위해 로그인을 한 다음 탭을 하나 더 열어서 예약 페이지에 접속하는 방식을 사용하기로 했다.

탭을 하나 더 여는 것은 두 번째 라인처럼 window.open을 사용해서 탭을 하나 더 열어 주면 된다.

login 함수를 호출했다.

def login(wd):
    tabs = wd.window_handles
    wd.switch_to_window(tabs[0])
    wd.get('http://nid.naver.com/nidlogin.login')

    wd.implicitly_wait(3)

    wd.find_element_by_name('id').send_keys('id')
    wd.find_element_by_name('pw').send_keys('pw')

    wd.find_element_by_xpath('//*[@id="log.login"]').click()

    reservation(wd)

login 함수는 위와 같이 정의되어 있다. id, pw를 넣는 곳의 element를 찾아서 실제 id와 pw를 send_keys로 값을 넣어주고 로그인 버튼을 클릭해 주면 된다. 

** 현재 send_keys로 값을 보내는 게 자동 로그인에서 막혀 있는데 copy, paste로 우회하는 방법을 다음에 올려보자..**

 

로그인 버튼을 찾을 때는 xpath(XML Path Language)라는 걸 사용했다.

우선 F12를 눌러 개발자 도구를 연다.

개발자 도구 맨 왼쪽에 보면 화살표 모양의 element를 선택하면 소스코드를 찾아주는 기능이 있다.

클릭하고 화면으로 돌아와 xpath가 알고 싶은 곳 위에 마우스를 올린 후 클릭한다.

그러면 마우스를 따라 움직이던 소스코드가 고정된다.

소스 코드 위에서 마우스 우클릭을 눌러 XPath를 복사해주면 끝.

def reservation(wd):
    tabs = wd.window_handles
    wd.switch_to_window(tabs[1])
    wd.get('네이버 예약 사이트 주소')

    wd.implicitly_wait(3)

    wd.find_element_by_xpath('').click()
    wd.find_element_by_xpath('').click()
    wd.find_element_by_xpath('').click()

이런 식으로 reservation함수에서는 이전에 열어두었던 탭에서 예약하고자 하는 곳의 페이지를 열어 xpath를 클릭 클릭해주면 매크로 작성이 끝난다.

Comments