[Python] Selenium

신은지·2024년 11월 25일
0

Python

목록 보기
23/23
post-thumbnail

Selenium

Web browser를 원격조작하는 도구이다. 자동으로 URL을 열고 클릭, 스크롤, 문자의 입력, 화면 캡처 등이 가능하다.


Selenium Library Install

conda install selenium # for Windows,Mac(intel)
pip install selenium # for Mac(m1)

Use Selenium 4 without ChromeDriver

Selenium 4 부터는 WebDriver Manager를 자동으로 관리해주는 기능이 추가되어, 사용자가 ChromeDriver를 수동으로 다운로드하고 경로를 설정할 필요가 없다.

🚨 Selenium 4 이전 버전을 사용하려면?

본인이 사용하고 있는 Chrome ver 확인ChromeDriver 설치가 필요하다.


Selenium webdriver 사용하기

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://velog.io/@rlozlr/posts')

# 화면 최대 크기 설정
driver.maximize_window()

# 화면 최소 크기 설정
driver.minimize_window()

# 화면 크기 설정
driver.set_window_size(600, 600)

# 새로 고침
driver.refresh()

# 뒤로 가기
driver.back()

# 앞으로 가기
driver.forward()

# 클릭
from selenium.webdriver.common.by import By

first_content = driver.find_element(By.CSS_SELECTOR,'body > div > div.BasicLayout_block__6bmSl > div.responsive_mainResponsive___uG64 > main > div > section > div.VelogPosts_block__nfCQF > div.FlatPostCardList_block__VoFQe > div:nth-child(1)')
first_content.click()

# 새로운 탭 생성
driver.execute_script('window.open("https://github.com/rlozlr")')

# 탭 이동
driver.switch_to.window(driver.window_handles[0])

# Selenium에서 현재 열린 브라우저 창(혹은 탭)의 수
len(driver.window_handles)

# 탭 닫기
driver.close()

# driver 종료
driver.quit() 

화면 스크롤

# 스크롤 가능한 높이(길이)
# JavaScript 코드 실행
driver.execute_script('return document.body.scrollHeight')

# 화면 스크롤 하단 이동
driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')

# 현재 보이는 화면 스크린샷 저장
driver.save_screenshot('./last_height.png')

# 화면 스크롤 상단 이동
driver.execute_script('window.scrollTo(0, 0);')

# 특정 태그 지점까지 스크롤 이동
from selenium.webdriver import ActionChains

some_tag = driver.find_element(By.CSS_SELECTOR,'body > div > div.BasicLayout_block__6bmSl > div.responsive_mainResponsive___uG64 > main > div > section > div.VelogPosts_block__nfCQF > div.FlatPostCardList_block__VoFQe > div:nth-child(1)')
action = ActionChains(driver)
action.move_to_element(some_tag).perform()

CSS_SELECTOR

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

driver = webdriver.Chrome()
driver.get('https://www.naver.com')

keyword = driver.find_element(By.CSS_SELECTOR, '#query')
keyword.clear()
keyword.send_keys('파이썬')

search_btn = driver.find_element(By.CSS_SELECTOR, '#search-btn')
search_btn.click()

XPATH

'//': 최상위
'*': 자손 태그
'/': 자식 태그
'div[1]': div 중에서 1번째 태그
//*[@id="main_pack"]/section/div/ul/li[1]/div[1]/div[2]/div[2]/a
driver.find_element(By.XPATH, '//*[@id="query"]').send_keys('xpath')
driver.find_element(By.XPATH, '//*[@id="search-btn"]').click()
driver.quit()

검색어 입력

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

driver = webdriver.Chrome()
driver.get('https://velog.io/@rlozlr/posts')

# 1. 돋보기 버튼을 선택
from selenium.webdriver import ActionChains

search_tag = driver.find_element(By.CSS_SELECTOR, '.VelogSearchInput_search__TEriX')
action = ActionChains(driver)
action.click(search_tag)
action.perform()

# 2. 검색어를 입력
driver.find_element(By.CSS_SELECTOR, 'body > div > div.BasicLayout_block__6bmSl > div.responsive_mainResponsive___uG64 > main > div > section > div.VelogSearchInput_block__z9Wa8 > div > input').send_keys('Algorithm')

Selenium + BeautifulSoup

# 현재 화면의 HTML 코드 가져오기
# Selenium을 이용해 현재 열린 페이지의 HTML 소스 가져오기
req = driver.page_source

# BeautifulSoup 객체로 파싱하기
# BeautifulSoup을 사용해 HTML 소스를 파싱하여, HTML 문서를 객체로 변환
soup = BeautifulSoup(req, 'html.parser')

# 특정 클래스가 적용된 요소 선택하기
# 'FlatPostCard_block__a1qM7' 클래스를 가진 요소들을 모두 선택하여 리스트로 반환
contents = soup.select('.FlatPostCard_block__a1qM7')

# 선택된 요소들의 개수 출력
# 선택된 요소들의 개수를 출력하여, 몇 개의 해당 요소가 있는지 확인
len(contents)

# 세 번째 요소 출력
# 선택된 요소 중 세 번째 요소 가져오기 (인덱스는 0부터 시작)
contents[2]





* 이 글은 제로베이스 데이터 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.

profile
I believe there is no best, only better

0개의 댓글