selenium
모듈 정의
- 웹 애플리케이션 테스트를 위한 프레임워크
-> 주로 제작한 홈페이지를 테스트하기 위해 사용
- 다양한 언어에서 지원하며(C++, Java, Python등) 사용자가 아닌 프로그램이 웹 브라우저를 제어할 수 있도록 지원
- 웹 브라우저마다 클라이언트 프로그램(Web Driver)이 별도로 필요(이유- 웹 브라우저 <->프로그램 간 통신 목적)
- 크롤링보다는 웹을 제어하는 목적이 더 큼
selenium 모듈 설치
외부모듈로 BeautifulSoup과 같이 콘솔창, Jupyter Notebook, Ananonda등으로 자유롭게 설치
Jupyter Notebook 기준
- !pip install selenium
Web Driver 설치
https://chromedriver.chromium.org/downloads
환경에 맞는 종류를 다운 받아서 지정한 경로에 압축 해제
- 압축 해제한 파일명은 수정하지 말 것
selenium 모듈 사용법
selenium 모듈 호출 후 설치한 Web Driver 경로를 지정
원하는 홈페이지를 해당 Web Driver로 실행
!pip install selenium #셀레니움 모듈 설치
HTML로 접근하기
- BeautifulSoup 모듈과 비슷하게 HTML문서의 구조에 따라 접근할 수 있음
- BeautifulSoup에서 원하는 태그, 속성 등을 가져오기 위해 단일 객체는 find(), 복수 객체는 find_all()함수로 접근 했다 면, selenium에서는 태그 종류에 따라 각각 함수가 있음
단일 객체 | 복수 객체(리스트 형태) |
find_element_by_id() | |
find_element_by_css_selector() | |
find_element_by_class_name() | find_elements_by_class_name() |
find_elements_by_xpath() | |
find_elements_by_tag_name() | |
find_element_by_id()
- 원격으로 브라우저를 열고 해당 id의 정보를 가져옴
import selenium
from selenium import webdriver
path = "C:\python_temp\chromedriver.exe"
driver = webdriver.Chrome(path)
driver.get("https://www.naver.com")
element = driver.find_element_by_id("themecast") #아이디가 themecast인 내용을 element로 지정
print(element)
print(element.text)#element 내용 출력
find_element_by_class_name()
- 원격으로 브라우저를 열고 해당 class의 정보를 가져옴
import selenium
from selenium import webdriver
path = "C:\python_temp\chromedriver.exe"
driver = webdriver.Chrome(path)
driver.get("https://www.naver.com")
element = driver.find_element_by_class_name("list_nav") #클래스가가 list_nav인 내용을 element로 지정
print(element)
print(element.text)
웹 페이지 이벤트로 제어하기
selenium 은 브라우저를 직접 제어하기 때문에 마치 사람이 직접 컨트롤 하듯 마우스를 클릭, 키보드 입력, 자바 스크립트 등 이벤트 처리를 할 수 있다.
마우스 클릭: click()
키보드 입력: send_keys()
자바스크립트 삽입 : execute_script()
입력 양식 전송 : submit()
스크린 샷: screenshot(파일이름)
글자 지움: clear()
뒤로 가기 : back()
앞으로 가기 : forward()
이벤트로 제어하는 샘플
클래스 네임을 찾아 클릭이벤트 발생 예
import selenium
from selenium import webdriver
import time
path = "C:\python_temp\chromedriver.exe"#크롬드라이버가 설치된 경로
driver = webdriver.Chrome(path)
driver.get("https://www.*****.com")#제어할 웹페이지
element = driver.find_element_by_class_name("btn_more")#클래스 이름으로 btn_more 검색
print(element.text)
time.sleep(5)#몇초뒤에 아래 코드 실행
element.click()
실행하면 브라우저가 열리고 해당 url의 btn_more 클래스를 가진 요소에 5초 뒤 클릭 이벤트가 발생한다.
아이디로 요소를 찾고 내용을 입력하고 엔터키 입력 예
import selenium
from selenium.webdriver.common.keys import Keys #키에 관련된 모듈 가져오기
from selenium import webdriver
import time #sleep메소드 실행을 위해 time모듈 임포트
path = "C:\python_temp\chromedriver.exe"
driver = webdriver.Chrome(path)
driver.get("https://www.*****.com")
element = driver.find_element_by_id("query")
time.sleep(5) #5초 기다려~
element.send_keys("파이썬")#파이썬 내용 입력
time.sleep(3)
element.send_keys(Keys.ENTER)#엔터키 실행
내용 입력 뒤 버튼 찾아 누르는 샘플
import selenium
from selenium.webdriver.common.keys import Keys #키에 관련된 모듈 가져오기
from selenium import webdriver
import time
path = "C:\python_temp\chromedriver.exe"
driver = webdriver.Chrome(path)
driver.get("https://www.*****.com")
element = driver.find_element_by_id("query")#페이지에서 검색을 입력할 수 있는 요소를 찾자.
time.sleep(5)
element.send_keys("뉴스데스크")
time.sleep(3)
element_btn = driver.find_element_by_id("search_btn")#id로 search_btn 을 찾아 객체 지정
element_btn.click()
#왜 변수를 객체라고 하나면 파이썬은 변수가 다 객체임
'AI > StudyNote' 카테고리의 다른 글
Python #웹크롤링 #txt #xlsx #csv (0) | 2021.09.14 |
---|---|
Python #웹크롤링 #xpath #txt파일저장 (0) | 2021.09.13 |
Python #웹크롤링 #BeautifulSoup 모듈 (0) | 2021.09.10 |
Python #웹크롤링 #requests 모듈 #urllib 모듈 (0) | 2021.09.10 |
Python #예외처리 (0) | 2021.09.08 |