본문 바로가기

AI/StudyNote

Python #웹 제어 #selenium 모듈

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()

#왜 변수를 객체라고 하나면 파이썬은 변수가 다 객체임

 

 

 

반응형