[파이썬 코딩 강의] 웹과 파이썬 (Selenium 편)

2024. 10. 7. 08:00·프로그래밍/Python
반응형

 

안녕하세요 펭귄 교수입니다.

 

이번이 웹과 파이썬 강의 마지막 편이 되겠네요.

 

이번에는 동적 크롤링을 위한 라이브러리, Selenium에 대한 강의입니다.


Selenium

 

Selenium은 2004년 시카고에서 처음 개발이 시작된 자동화 프레임워크입니다.

아파치 라이센스를 가지고 있고, 자바, C#, R, 파이썬 등 다양한 언어를 지원합니다.

 

브라우저 플랫폼을 사용하여 자동화를 진행하고, 지원하는 브라우저는 크롬, 인터넷 익스플로러, 마이크로소프트 엣지, 사파리, 오페라가 있습니다.

 


설치

저희는 크롬 드라이버를 사용해보겠습니다.

 

그러기 위해 먼저 크롬의 버전을 확인합니다.

우측 3개 점을 클릭, 도움말 -> Chrome 정보 에 들어갑니다.

도움말 > Chrome 정보
페이지에 나오는 버전 정보 확인 : 129.0.6668.71

버전에 맞는 다운로드 링크

  • Version 114 이하 
  • Version 115 이상

다운로드된 드라이버는 사용할 파이썬 파일과 같은 경로에 넣습니다.

 

파이썬 라이브러리 설치

pip install selenium

사용법

기초 사용법

from selenium import webdriver

driver = webdriver.Chrome()

url = 'https://www.google.com'
driver.get(url)

 

페이지 정보

title = driver.title # 페이지 타이틀
url = driver.current_url # 현재 URL

# 창 크기 설정
width = 1920
height = 1080
driver.set_window_size(width, height)

 

원하는 태그 찾기

이전 Beautiful Soup과 동일하게 Css Selector 방식, XPath 방식 등으로 요소, 태그들을 찾을 수 있습니다.

from selenium.webdriver.common.by import By

# 단일 요소 찾기 (find_element)
driver.find_element(By.CSS_SELETOR, 'SELECTOR')
driver.find_element(By.XPATH, 'SELECTOR')

# 여러 개 찾기 (find_elements)
driver.find_elements(By.CSS_SELETOR, 'SELECTOR')
driver.find_elements(By.XPATH, 'SELECTOR')

 

이전 자료들을 보면 

find_element_by_css_selector, find_element_by_xpath 와 같은 메서드를 사용했는데 현재 버전에서는 해당 메서드들이 삭제된 것으로 보입니다.

그래서 By 객체를 사용해서 해당 기능을 구현했습니다.

 

By객체에 있는 요소는 다음과 같습니다.

  • ID
  • XPATH
  • LINK_TEXT
  • PARTIAL_LINK_TEXT
  • NAME
  • TAG_NAME
  • CLASS_NAME
  • CSS_SELECTOR

적재적소에 잘 사용하는 것이 필요합니다.

 

로딩 대기

몇몇 페이지들은 로드하는 데 시간이 걸려 대기할 필요가 있습니다.

암묵적 대기, 명시적 대기에 대해 알려드리겠습니다.

# Implicit Waits (암묵적 대기)
driver.implicitly_wait(time_ti_wait=5) # seconds

# Explicit Waits (명시적 대기)
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

driver = webdriver.Chrome()
driver.get(url='https://www.google.com/')
try:
    element = WebDriverWait(driver, 5).until(
        EC.presence_of_element_located((By.CLASS_NAME, 'class_name'))
    )
    print(element)
finally:
    driver.quit()

 

키 입력하기

input 등 입력이 필요할 때는 아래와 같은 방식으로 사용하면 됩니다.

driver.find_element(By.CLASS_NAME, "class_name").send_keys("key")

 

화면 조작

# 클릭
driver.find_element(By.CLASS_NAME, "class_name").click()

# 옵션 선택
from selenium.webdriver.support.ui import Select

select = Select(driver.find_element(By.NAME, 'select_name'))

## 선택
select.select_by_index(index=2)
select.select_by_visible_text(text="option_text")
select.select_by_value(value='고리오')

## 선택 해제
select.deselect_by_index(index=2)
select.deselect_by_visible_text(text="option_text")
select.deselect_by_value(value='고리오')

## 제출
submit_btn.submit()

# 드래그 앤 드랍
from selenium.webdriver import ActionChains

action_chains = ActionChains(driver)
action_chains.drag_and_drop(source, target).perform()

# Javascript 코드 실행
driver.execute_script("alert('창 실행')")

# 뒤로 가기, 앞으로 가기
driver.forward()
driver.back()

# 스크린샷 저장
driver.save_screenshot('screenshot.png')

# 특정 요소 스크린샷 저장
map = driver.find_element(By.CLASS_NAME, 'class_name')
map.screenshot('map.png')

 

쿠키 (Cookie)

driver.add_cookie({"name": "cookie"}) # 쿠키 설정
cookie = driver.get_cookie("test1")   # 쿠키 가져오기
all = driver.get_cookies()            # 모든 쿠키 가져오기
driver.delete_cookie("test1")         # 쿠키 삭제
driver.delete_all_cookies()           # 모든 쿠키 삭제

 

크롬 옵션 (Chrome Option)

options = webdriver.ChromeOptions()

options.add_argument("headless") # 백그라운드 실행 옵션
options.add_argument('--window-size= x, y') #브라우너 크기 지정
options.add_argument('--start-maximized') # 크기 최대화
options.add_argument('--blink-settings=imagesEnabled=false') # 이미지 로딩 하지 않음
options.add_argument('incognito') # 시크릿 모드

driver = webdriver.Chrome(options=options)

 

 

 

참조

https://selenium-python.readthedocs.io/index.html

반응형

'프로그래밍 > Python' 카테고리의 다른 글

[파이썬 코딩 강의] 데이터베이스와 파이썬 : 기본 개념  (0) 2024.10.16
[파이썬 코딩 강의] 웹과 파이썬 (Beautiful Soup 편)  (1) 2024.10.03
[파이썬 코딩 강의] 웹과 파이썬 (requests 편)  (0) 2024.09.28
[파이썬 코딩 강의] 객체 지향 언어  (1) 2024.09.26
[파이썬 코딩 강의] 클래스와 메서드  (0) 2024.09.21
'프로그래밍/Python' 카테고리의 다른 글
  • [파이썬 코딩 강의] 데이터베이스와 파이썬 : 기본 개념
  • [파이썬 코딩 강의] 웹과 파이썬 (Beautiful Soup 편)
  • [파이썬 코딩 강의] 웹과 파이썬 (requests 편)
  • [파이썬 코딩 강의] 객체 지향 언어
Dev.Poinguinie
Dev.Poinguinie
게임, 코딩 블로그 입니다. 여러 일상적인 글도 올려요! 많이 봐주세요! 감사합니다.
  • Dev.Poinguinie
    펭귄교수
    Dev.Poinguinie
    • 분류 전체보기
      • 새티스팩토리
        • 정보
        • 모드
        • 리뷰
      • 펠월드
        • 정보
        • 패치노트
      • 게임
        • 스팀 세일
        • 테라리아
        • 디펜서바이버
      • App
        • Kotlin
        • Flutter
      • Front End
        • HTML
        • JavaScript
        • React
      • Back End
        • Node.js
      • Docker
        • Docker 강의
        • Docker Project
      • 프로그래밍
        • AI
        • Chrome Extension
        • Markdown
        • Python
        • C++
        • Linux
        • Error
        • Tool
      • Computer Science
        • Algorithm
        • Network
      • 게임 프로그래밍
        • 유니티
      • 제작
        • 웹사이트
        • 기타 프로그램
      • 일상
        • 자작시
        • 노래 추천 및 정보
        • 블로그 운영
        • 내일의 모든 것
        • 오블완 챌린지
      • 리뷰
        • 식당 리뷰
        • IT 리뷰
  • 최근 글

  • 링크

    • 새티스 팩토리 모드
    • 깃허브 블로그
    • 깃허브 프로필
  • 공지사항

    • 티스토리 스킨 변경
    • 파이썬 코딩 강의 공지사항
  • hELLO· Designed By정상우.v4.10.3
Dev.Poinguinie
[파이썬 코딩 강의] 웹과 파이썬 (Selenium 편)
상단으로

티스토리툴바