티스토리 뷰

반응형

1. Selenium 패키지란?

selenium 패키지는 chromedriver를 제어하거나 원하는 정보를 얻기 위해 사용합니다.

크롤링을 하다보면 무엇인가 입력하거나 특정 버튼을 눌러야 하는 상황이 발생합니다. 사람이 그러한 행동을 하는 대신 컴퓨터가 할 수 있도록 해주는 패키지가 selenium입니다.

selenium 패키지도 웹 정보를 크롤링하는 것이 가능하기 때문에 저는 웹 크롤링은 거의 selenium을 패키지를 사용하는 편입니다.

2. 설치 방법

vscode의 터미널창에서 아래와 같이 입력하면 됩니다. 만약 anaconda를 사용하신다면 pip 혹은 conda 명령어를 둘 다 사용가능하시고, python 공식 홈페이지를 통해 python을 설치하셨다면 아래의 코드를 사용하시면 됩니다.

pip install selenium

3. 사용 방법

디테일한 사용 방법은 다음 시간부터 알아보도록 하고, 이번 시간에는 크롬 드라이버를 이용해서 원하는 사이트에 접속하는 것 까지 해보겠습니다.

1) 관련 패키지 import

selenium 패키지를 사용하기 위해서는 아래의 두 가지 모듈을 import 해주어야 합니다.

추가적으로 페이지 로딩을 기다리는데에 사용할 time 모듈도 import 해줍니다. 이 모듈은 파이썬 내장 라이브러리에 포함되어 있어 별도 설치는 필요 없습니다.

# selenium의 webdriver를 사용하기 위한 import
from selenium import webdriver

# selenium으로 키를 조작하기 위한 import
from selenium.webdriver.common.keys import Keys

# 페이지 로딩을 기다리는데에 사용할 time 모듈 import
import time

2) 크롬 드라이버 실행

 

관련 패키지를 불러왔으면 다음으로 해줄 일은 크롬 드라이버를 이용해서 크롬을 실행해주는 일입니다.

크롬 드라이버는 컴퓨터가 크롬 웹 브라우저를 다룰 수 있도록 해주는 프로그램으로 구글에서 제공 해줍니다. 크롬 드라이버는 코드를 실행 시키시면 자동으로 다운로드 되니 별도 설치가 필요 없습니다. (4.6 버전부터 크롬드라이버 별도 다운로드 및 경로 설정 불필요)

# 크롬드라이버 실행
driver = webdriver.Chrome() 

#크롬 드라이버에 url 주소 넣고 실행
driver.get('https://www.google.co.kr/')

# 페이지가 완전히 로딩되도록 3초동안 기다림
time.sleep(3)

<크롬 드라이버로 구글 웹페이지에 접속한 상태>

 

셀레니윰 부가기능도 같이 import 할 경우

 

import selenium
from selenium import webdriver
from selenium.webdriver import ActionChains

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait

 

 

 

관심 요소 선택

 

ㄴ위와같이 관심있는 웹페이지에서 오른쪽버튼 클릭 후 '검사'를 눌러 개발자툴로 들어가면 해당 항목에서 오른쪽버튼>Copy에서 복사할 path정류를 클릭해줍니다

 

*요소 찾기 방법 목록


# ID를 사용하여 요소 찾기
element_by_id = driver.find_element(By.ID, "element_id")

# CLASS_NAME을 이용하여 요소 찾기
element_by_class = driver.find_element(By.CLASS_NAME, "element_class")

# NAME을 이용하여 요소 찾기
element_by_name = driver.find_element(By.NAME, "element_name")

# LINK_TEXT를 이용하여 요소 찾기
element_by_link_text = driver.find_element(By.LINK_TEXT, "Click Here")

# CSS_SELECTOR를 이용하여 요소 찾기
element_by_css_selector = driver.find_element(By.CSS_SELECTOR, "#element_id")

# XPath를 이용하여 요소 찾기
element_by_xpath = driver.find_element(By.XPATH, "//div[@class='element_class']")

 

 

 

클릭

element_by_id = driver.find_element(By.ID, "element_id")

element_by_id.click()

 

 

텍스트 입력 엔터

element_by_id = driver.find_element(By.ID, "element_id")

element_by_id.send_keys('하이하이')
element_by_id.send_keys(Keys.ENTER)

 

텍스트 삭제

element_by_id = driver.find_element(By.ID, "element_id")

element_by_id.clear()

 

팝업창 수락/거절

#경고창으로 이동
driver.switch_to.alert

from selenium.webdriver.common.alert import Alert

Alert(driver).accept()    #경고창 수락 누름
Alert(driver).dismiss()   #경고창 거절 누름
print(Alert(driver).text  # 경고창 텍스트 얻음

 

스크린샷

#캡쳐할 엘레먼트 지정
element = driver.find_element(By.ID, "element_id")

#캡쳐 (name에는 파일명)
element.save_screenshot('name.jpg')

 

 

 

 


 

[직접 해보기]

 

구글에 '아케인2'를 검색하여 나온는 화면을 캡쳐하여 내 컴퓨터에 저장하기

 


import selenium
from selenium import webdriver

from selenium.webdriver.common.alert import Alert

 

googleurl="https://www.google.com/"
driver.get(googleurl)

searchinput_elem=driver.find_element(By.XPATH, '//*[@id="APjFqb"]')

searchinput_elem.send_keys('아케인2')
searchinput_elem.send_keys(Keys.ENTER)

capture_elem = driver.find_element(By.ID, "center_col")
scrrenshot = capture_elem.screenshot_as_png
with open('arcane2.png', 'wb') as f:
    f.write(scrrenshot)


 

반응형