본문 바로가기
Python/Python_Crawling

셀레니움(Selenium) 기본기능

by Mr.DonyStark 2023. 12. 12.

□ 기본 기능

 

초기설치 및 실행시 import library

#셀레니움 창 생성을 위한 라이브러리 호출 실행
from selenium import webdriver
from selenium.webdriver.common.by import By
import chromedriver_autoinstaller
import time
#사용자 PC 상의 크롬에 맞는 드라이버 설치
chromedriver_autoinstaller.install()

 

 ○ 특정 페이지 접속후 특정영역에서의 텍스트 출력

   - CSS SELECTOR를 활용하여 특정영역에 포함된 텍스트를 출력하도록 진행

   - XPATH를 활용하여, XPATH 특정영역 클릭(현재 코드기준 스포츠)

     *지속적으로 업데이트를 하는 웹사이트를 대상으로 진행한다면 지정된 XPATH가 바뀌는 경우가 있으니 지속해서 확인하며 진행할 것

 

#셀레니움 창 생성을 위한 라이브러리 호출 실행
from selenium import webdriver
from selenium.webdriver.common.by import By
import chromedriver_autoinstaller
import time

#사용자 PC 상의 크롬에 맞는 드라이버 설치
chromedriver_autoinstaller.install()
driver = webdriver.Chrome()

#크롬창 생성과 동시에 진입하고자하는 링크입력 : driver.get(링크)
target_add = 'https://www.naver.com//' #특정 웹주소 입력
driver.get(target_add)
time.sleep(3) #해당 링크 접속후 3초 대기

#클릭하고자하는 요소에대한 CSS 정보를 입력
#요소를 찾아 copy 해옴
selector = '#newsstand > div.ContentHeaderView-module__content_header___nSgPg'
#찾아온 요소를 변수에 저장
target_menu = driver.find_element(By.CSS_SELECTOR, selector)

#정보가 저장된 변수에 포함된 텍스트를 출력
print(f'타겟범위 내 텍스트\t:\t{target_menu.text}')

#정보가 저장된 변수에 포함된 영역 클릭(xpath를 활용하여 특정영역지정)
driver.find_element(By.XPATH, '//*[@id="newsstand"]/div[1]/div/ul/li[3]/a').click()

input()  #python app.py 실행하면 크롬창 생성

 

 기본기능을 활용한 페이지 이동/대기/예외처리

 

#셀레니움 창 생성을 위한 라이브러리 호출 실행
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

#사용자 PC 상의 크롬에 맞는 드라이버 설치
#chromedriver_autoinstaller.install() 최초 설치시에만 사용
driver = webdriver.Chrome()

#1. 네비게이션 : 웹페이지로 이동하는 것을 의미. 즉, 웹 페이지별 주소로 이동하는 것을 의미
#.get() 원하는 페이지로 이동
driver.get('https://www.naver.com/')
time.sleep(2) #해당 링크 접속후 2초 대기
#.get() 원하는 페이지로 이동
driver.get('https://www.google.com/')
time.sleep(2) #해당 링크 접속후 2초 대기
#.back() 뒤로가기 함수
driver.back()
time.sleep(2) #해당 링크 접속후 2초 대기
#.forward() 앞으로가기 이동
driver.forward()
time.sleep(2) #해당 링크 접속후 2초 대기
#.refresh() 새로고침 하기
driver.refresh()
time.sleep(2) #해당 링크 접속후 2초 대기

#2. 브라우져 정보 browser information : title, curren_url
#.title url 타이틀 가져옴
title = driver.title
url = driver.current_url
print(f'페이지 네비게이션 종료\t현재주소 : {url}\t현재 페이지타이틀 : {title}')

#3. 드라이버 웨이트 Driver wait
#2초때 로딩이 끝나서 element가 찾아짐. 30초까지는 기다리겠지만 그 이후 에는 에러표시하겠음
selector = 'body > div.L3eUgb > div.o3j99.n1xJcf.Ne6nSd'
try:
    WebDriverWait(driver, 30).until(EC.presence_of_all_elements_located(By.CSS_SELECTOR, selector))
except:
    print('오류(예외) 발생, 예외처리 진행')
print('현재 포인트까지 이상없음')

input()  #python app.py 실행하면 크롬창 생성

 

 

 

TIP 1) time.sleep을 사용시 네트워크 속도를 고려하여 사용해야함. 즉, 네트워크 상태에 따라서 다름.

TIP 2) 정적 웹사이트 : 웹페이지가 모두 완성되어 로딩이 되는 페이지. 스태틱 웹사이트라고도 부름.
TIP 3) 동적 웹사이트 : 데이터를 웹페이지에서 로그인 및 로딩하여 데이터를 확보해야하는 다이나믹 웹사이트라고 부름.