Web browser를 원격조작하는 도구이다. 자동으로 URL을 열고 클릭, 스크롤, 문자의 입력, 화면 캡처 등이 가능하다.
conda install selenium # for Windows,Mac(intel) pip install selenium # for Mac(m1)
Selenium 4 부터는 WebDriver Manager를 자동으로 관리해주는 기능이 추가되어, 사용자가 ChromeDriver를 수동으로 다운로드하고 경로를 설정할 필요가 없다.
🚨 Selenium 4 이전 버전을 사용하려면?
본인이 사용하고 있는 Chrome ver 확인과 ChromeDriver 설치가 필요하다.
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()
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()
'//': 최상위 '*': 자손 태그 '/': 자식 태그 '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')
# 현재 화면의 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]
* 이 글은 제로베이스 데이터 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.