Selenium 크롤링 기초 세팅과 간단 사용 방법
한동안 셀레니움을 사용할 일이 없었는데, 최근에 마케팅 팀의 지원사격 요청으로 반복적인 정보확인 업무를 들여다보게 되면서 Selenium을 다시 활용해야할 일이 생겼습니다.
아래 포스팅 이후 딱 1년 정도 지난 것 같은데, 아마도 이 때부터 셀레니움에 다소 변화가 있었던 것 같습니다.
설치나 기본적인 사용은 이전 포스팅을 참고해주세요.
사용방식이 조금달라진 면이 있더라구요. 달라진 부분은 Document를 확인해보면 되는거죠 뭐^^
Selenium Document는 공식 페이지를 참고하자
구글링을 통해서 관련정보를 획득하는 것도 좋지만, 공식사이트에서 Document를 읽어 보는게 가장 정확하겠죠?
https://www.selenium.dev/documentation/
브라우저를 컨트롤 하기 위해서는 Selenium Webdriver 파트를 참고하면 됩니다.
아래 페이지에서 예제를 간단하게 살펴볼 수 있습니다. 하나씩 실행해보면 아하~ 이렇게 동작하는구나! 하고 아주 간단하게 동작원리를 파악할 수 있습니다.
https://www.selenium.dev/documentation/webdriver/getting_started/first_script/
저는 사용하기 편한 Python을 활용해서 셀레니움을 구동하고 있습니다.
Selenium 구동 시 가장 중요한 작업! Chrome Driver 버전 확인!!
셀레니움을 이용해서 브라우저 자동화를 하려면, 가장 중요한 것은 내 컴퓨터에서 사용하고 있는 브라우저의 버전을 확인하고 이에 맞는 크롬 드라이버의 버전을 사용하는 것입니다. 크롬 등의 브라우저가 업데이트 될 때 마다 이 점은 신경을 써줘야 합니다.
이 점만 유념한다면 브라우저를 자동화해서 제어하는 데에 큰 어려움은 없을 것으로 생각됩니다.
크롬 드라이버는 아래 경로에서 확인하고 본인의 PC에 맞는 드라이버로 다운로드 받아서 사용하면 됩니다.
https://chromedriver.chromium.org/downloads
Selenium 기본 코드를 살펴보자
셀레니움에서 제공하는 Github 예제코드를 살펴봅니다. 대략적으로라도 이해를 해둔다면 이후 기본적인 활용에 다양하게 응용할 수 있는 근육이 생길 것입니다.
# 셀리니움 라이브러리에서 웹드라이버 모듈을 임포트 해오기
from selenium import webdriver
# Webdriver 모듈 안의 common 모듈의 By 클래스를 임포트 해오기
# 이 부분이 예전 버전과 크게 바뀐 부분으로 보여집니다.
from selenium.webdriver.common.by import By
# Chrome 브라우저의 WebDriver 인스턴스를 생성합니다.
# 만약, Firefox를 제어하고 싶다면 driver = webdriver.Firefox() 이렇게 사용.
driver = webdriver.Chrome()
# 접속하고자 하는 URL을 넣어줍니다.
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
# <title> 정보를 가져옵니다. print(title)로 찍어보면 확인할 수 있겠죠?
title = driver.title
# diriver의 적용 시간을 0.5초까지 기다려준다.
driver.implicitly_wait(0.5)
# name = "my-text" 인 html 엘리먼트를 찾고 text_box 변수에 넣어준다.
text_box = driver.find_element(by=By.NAME, value="my-text")
# CSS 셀렉터로 이름이 button인 엘리먼트를 찾고 submit_button 변수에 넣어준다.
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")
# text_box 엘리먼트에 "Selenium"이라는 Text를 입력한다.
text_box.send_keys("Selenium")
# submit_button을 마우스 클릭! 한다.
submit_button.click()
# id = "message" 인 html 엘리먼트를 찾고 message 변수에 넣어준다.
message = driver.find_element(by=By.ID, value="message")
# message 객체의 text 값을 text 변수에 넣어준다.
# print(text)로 확인해보면, Received!가 찍힘.
text = message.text
# driver를 종료한다.
driver.quit()
저도 이번 학습을 잘 기억해두기 위해 한줄씩 주석으로 정리를 해두었습니다.
위 코드를 보면, 이 페이지에 접근하고 있습니다.
https://www.selenium.dev/selenium/web/web-form.html
아래 코드로, Text input 엘리먼트에 접근하고 있는 것이죠.
# name = "my-text" 인 html 엘리먼트를 찾고 text_box 변수에 넣어준다.
text_box = driver.find_element(by=By.NAME, value="my-text")
파이썬 예제 코드를 따라가보면 Text input 에 "Selenium"이라는 글자를 넣은 후 [Submit] 버튼을 클릭하는 과정임을 알 수 있습니다.
사람이 직접 타이핑을 하고 Submit 버튼 클릭 하면 폼전송이 이루어져서 아래 페이지로 이동하게 되는데, 이 과정을 셀레니움을 통해 아래의 파이썬 코드로 대신해주게 되는 것이죠. print를 한번 찍어보세요.
message = driver.find_element(by=By.ID, value="message")
text = message.text
print(text)
여기에서 id="message" 인 엘리면트가 가지고 있는 text 요소를 가져오는 것이죠.
마치며
셀레니움 사용방법이 복잡하다고 생각하지 마시고, 찬찬히 한줄 한줄 따라가면서 살펴보세요.^^
앞에서 배운 기초 자료를 통해 어느 정도 익숙해지고 나면, 로그인 창이 있는 네이버 등의 웹사이트에 자동으로 로그인 하는 코드를 한번 만들어 보면서 실습을 해보면 좋은 공부가 되지 않을까 생각합니다.
오늘도 즐거운 코딩, 즐코딩
Kincoding.
'Python > Crawling' 카테고리의 다른 글
Selenium - find_element_by_css_selector는 이제 안됩니다. (0) | 2022.11.23 |
---|
댓글