Python(파이썬) 셀레니움(Selenium) 이용해서 웹 크롤링 하는 방법 2

파이썬 Python

Python(파이썬) 셀레니움(Selenium) 이용해서 웹 크롤링 하는 방법 2

 

환경: PyCharm

 

Selenium(셀레니움) 은 사용자가 아닌 프로그램이 웹 브라우저를 제어할 수 있게 해 주는 라이브러리입니다. Selenium 은 서버와 클라이언트로 나누는데, 웹 브라우저 종류 마다 클라이언트 프로그램이 별도로 필요합니다. 이전에 Selenium 라이브러리를 설치하고 웹 브라우저 제어를 위한 드라이버 다운로드 방법에 대해 알았습니다. 오늘은 티스토리 블로그 관리자 페이지를 로그인 해 보겠습니다.

 

먼저 Selenium 으로 로그인을 하려면 정보를 입력하고 클릭할 컨트롤들의 ID 를 알아야 합니다. 웹 페이지를 소스를 직접 열어서 확인할 수 있습니다. 크롬은 웹 페이지 컨트롤을 선택하면 소스에서 해당 tag 를 찾아 주는 편리한 기능이 있습니다. F12 를 눌러 개발자 도구를 띄웁니다. 그리고 개발자 도구 왼쪽 끝에 화살표 버튼을 누릅니다.

Python(파이썬) 셀레니움(Selenium) 이용해서 웹 크롤링 하는 방법 2

 

화살표 버튼이 활성화된 상태에서 화면에 컨트롤을 클릭하거나 마우스를 가져가 보세요. 개발자 도구 화면에서 해당 컨트롤의 소스 위치를 찾아 줍니다

Python(파이썬) 셀레니움(Selenium) 이용해서 웹 크롤링 하는 방법 2

 


아이디와 패스워드를 입력할 input 태그의 id 값을 알아냅니다

Python(파이썬) 셀레니움(Selenium) 이용해서 웹 크롤링 하는 방법 2

 

로그인을 위한 아이디와 비밀번호 입력 컨트롤의 id 값을 알아 냈다면 WebDriver find_element_by_id 함수로 컨트롤 객체를 가져옵니다. 그리고 send_keys() 함수로 로그인 아이디와 패스워드를 입력합니다.

 

login = driver.find_element_by_id("loginId")

login.send_keys("dkjjaslfjdii")

login = driver.find_element_by_id("loginPw")

login.send_keys("******")

 

로그인을 위한 입력이 끝났다면 버튼을 클릭해야 합니다. 위에서 아이디와 비밀번호 입력 태그를 찾던 방법으로 버튼 태그를 찾습니다

Python(파이썬) 셀레니움(Selenium) 이용해서 웹 크롤링 하는 방법 2

 

태그를 선택하고 오른쪽 마우스를 눌러 Copy > Copy XPath 메뉴를 선택합니다. XPath 값을 복사할 까요? 태그 요소의 유일한 값인 id 가 없기 때문입니다. 대신 DOM 구조에서 위치를 나타내는 XPath 값을 알면 접근이 가능합니다.  

Python(파이썬) 셀레니움(Selenium) 이용해서 웹 크롤링 하는 방법 2

 

함수는 find_element_by_xpath() id 대신 xpath 가 붙었습니다. 따움표 “”” XPath 값을 find_element_by_xpath() 함수의 파라미터로 넘깁니다. 함수는 click() 입니다. 사용자가 로그인을 위해 버튼을 클릭한 것과 같습니다.

 

driver.find_element_by_xpath("""//*[@id="authForm"]/fieldset/div/button""").click()

 

전체 소스는 다음과 같습니다.

 

from selenium import webdriver

 

# 다운받은 chromedriver의 위치를 지정해준다.

driver = webdriver.Chrome('D:\Project\Python\chromedriver_win32\chromedriver.exe')

 

driver.implicitly_wait(3)

driver.get("http://mainia.tistory.com/admin/center/")

 

login = driver.find_element_by_id("loginId")

login.send_keys("gonhaha201@gmail.com")

login = driver.find_element_by_id("loginPw")

login.send_keys("****")

 

driver.find_element_by_xpath("""//*[@id="authForm"]/fieldset/div/button""").click()

 

소스를 실행한 결과 로그인에 성공했습니다. 이렇게 finde_element_by ~ 함수들을 이용해서 요소 객체를 가져오면 쉽게 제어할 수 있습니다

Python(파이썬) 셀레니움(Selenium) 이용해서 웹 크롤링 하는 방법 2

Posted by 녹두장군