민주의네모들

[python] Selenium으로 웹 페이지 크롤링하기 3 / 페이지 제어(blank에 값 입력, 버튼 클릭) 본문

이모저모

[python] Selenium으로 웹 페이지 크롤링하기 3 / 페이지 제어(blank에 값 입력, 버튼 클릭)

mjoooo 2020. 3. 11. 18:51
반응형

지난 포스팅에서는 웹 페이지에서 원하는 평문(text)과 표(table)를 크롤링하는 방법을 알아보았다.

(아래 링크 참조)

2020/02/14 - [이모저모] - [python] Selenium으로 웹 페이지 크롤링하기 / 평문(text)

 

[python] Selenium으로 웹 페이지 크롤링하기 / 평문(text)

1. Selenium 이란? 이번 포스팅에서는 selenium이라는 프레임워크를 통해 웹 페이지를 크롤링하는 방법에 대해 간단히 살펴보겠다. Selenium이란 주로 웹앱을 테스트하는 웹 프레임워크이다. webdriver의 API를 통..

minjoos.tistory.com

2020/02/24 - [이모저모] - [python] Selenium으로 웹 페이지 크롤링하기 2 / 표(table)

 

[python] Selenium으로 웹 페이지 크롤링하기 2 / 표(table)

지난 포스팅에서는 웹 페이지에서 원하는 평문(text)를 크롤링하는 방법에서 알아보았다. (아래 링크 참조) 2020/02/14 - [이모저모] - [python] Selenium으로 웹 페이지 크롤링하기 [python] Selenium으로 웹 페..

minjoos.tistory.com

 

 

오늘은 더 나아가 페이지를 코드로 제어하고 원하는 정보를 크롤링하는 방법에 대해 알아보겠다.

 

 

정보를 크롤링할 페이지는 임의로 정하였다.

from selenium import webdriver
from selenium.webdriver.support.ui import Select
import datetime

driver = webdriver.Chrome('./chromedriver')
driver.implicitly_wait(1)
driver.get('https://www.aia.co.kr/ko/our-products/medical-protection/non-par-denteal-health-plan.html')
driver.implicitly_wait(1)

 

위 코드에 나와있는 url은 보험사 홈페이지이다. 

 

 

보험사 홈페이지에는 아래와 같이 개인 정보를 입력하고 자신에게 맞는 보험료를 설계해주는 서비스가 있다.

우리는 이제 코드로 위의 빈칸들을 채워넣고 버튼을 클릭해서 나오는 '나에게 맞는 보험료' 정보를 크롤링할 것이다.

 

 

방법은 생각보다 매우 간단하다.

checkbox = driver.find_element_by_xpath('//*[@id="aia1701849055"]/div/div[1]/div[3]/label/span/span')
name = driver.find_element_by_xpath('//*[@id="aia452730991"]')
birthday = driver.find_element_by_xpath('//*[@id="aia1804180016"]')
sex = driver.find_element_by_xpath('//*[@id="aia1701849055"]/div/div[1]/div[5]/div/div[1]/div/div[2]/div[1]/div[1]')
phoneNumber = driver.find_element_by_xpath('//*[@id="aia1724353200"]')
email = driver.find_element_by_xpath('//*[@id="aia1236626147"]')
prefer = driver.find_element_by_xpath('//*[@id="aia1701849055"]/div/div[1]/div[7]/div/div[1]/div/div[2]/div[1]/div[1]')
button = driver.find_element_by_xpath('//*[@id="btn391303096"]')
button2 = driver.find_element_by_xpath('/html/body/div[12]/section/div/div/div/div/div/div/div[4]/div[1]/div[2]/div/a[2]')

driver.implicitly_wait(3)
checkbox.click()
driver.implicitly_wait(1)
name.send_keys('손민주')
driver.implicitly_wait(1)
birthday.send_keys('19990107')
driver.implicitly_wait(1)
sex.click()
driver.implicitly_wait(1)
phoneNumber.send_keys('01012345678')
driver.implicitly_wait(1)
email.send_keys('tina_98@naver.com')
driver.implicitly_wait(1)
prefer.click()
driver.implicitly_wait(1)
button.click()
driver.implicitly_wait(1)
button2.click()

find_element_by_xpath()를 이용하여 각 blank의 위치와 버튼의 위치를 변수에 저장해놓는다.

 

(find_element_by_xpath() 사용법은 이전 이전 글인 

2020/02/14 - [이모저모] - [python] Selenium으로 웹 페이지 크롤링하기 / 평문(text)

에 자세히 나와있다.)

 

변수 저장 후, click()과 send_keys() 등의 메소드를 통해 제어한다.

코드를 자세히 살펴보면

이름, 생일을 입력하고 성별에 맞는 버튼을 클릭한다.

그리고 휴대폰번호, 이메일을 입력하고 기타 정보에 맞는 버튼을 클릭한다.

 

그러면 이제 정보 크롤링을 위한 모든 밑바탕이 완성되었다.

 

위 코드를 실행시키면 아래와 같이 나에게 맞는 보험 정보가 뜬다.

 

나는 이 중 일부의 정보를 크롤링해보도록 하겠다.

table = driver.find_element_by_xpath('//*[@id="collapse-large-945472484"]/div[2]/table')
tbody = table.find_element_by_xpath('//*[@id="collapse-large-945472484"]/div[2]/table/tbody')
rows = tbody.find_elements_by_xpath('//*[@id="collapse-large-945472484"]/div[2]/table/tbody/tr')
for index, value in enumerate(rows):
    if(index!=0):
        body=value.find_elements_by_tag_name("td")[1]
        print(body.text)

방법은 이전 포스팅에서 다뤘던 표(table) 크롤링하기 방법과 같다.

 

위 코드까지 포함하여 같이 실행시켜주면,

 

위와 같이 원하는 정보가 크롤링되는 것을 확인할 수 있다.

 

 

 

 

 

사실 이번 포스팅은 이전에 다뤘던 방법이 많이 활용되었고,

추가된 것은 어떻게 코드를 통해 blank에 원하는 값을 채워넣고, 버튼을 클릭하는 등의 모션을 구현하는지이다.

 

이것으로 파이썬으로 Selenium을 통해 웹 페이지 크롤링하기 시리즈(?)를 끝내도록 하겠다!

반응형