[제로베이스] Selenium 기초

한결·2024년 1월 10일
0
post-thumbnail

Selenium은 웹 애플리케이션을 테스트하기 위한 자동화 도구로, 웹 브라우저를 제어하고 테스트를 자동화하는 데 사용됩니다. 이를 통해 웹 페이지를 열고, 사용자가 웹 브라우저에서 하는 것과 같은 작업을 자동으로 수행할 수 있습니다. 이번글은 Selenium의 간단한 이용 방법에 대해 알아보겠습니다.


기본 명령어

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://pinkwink.kr') # 페이지 열기

# 화면 최대 크기 설정
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, '#content > div.cover-masonry > div > ul > li:nth-child(1) > a > span.thum > img')
first_content.click()

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

# 탭 이동
driver.switch_to.window(driver.window_handles[0]) #첫 번째로 이동

# 탭 닫기
driver.close()

# 스크롤 가능한 높이
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, '#content > div:nth-child(2) > div > ul > li:nth-child(4) > a > figure > img')
action = ActionChains(driver)
action.move_to_element(some_tag).perform()

# 드라이버 끝내기
driver.quit()

검색어 입력

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

CSS_SELECTOR를 이용하는 방법

# 검색어 작성
keyword = driver.find_element(By.CSS_SELECTOR,'#query')
keyword.send_keys('파이썬')
# 검색 클릭
search_btn = driver.find_element(By.CSS_SELECTOR, '#search-btn')
search_btn.click()
# 검색어 초기화 하고 다시 작성
keyword = driver.find_element(By.CSS_SELECTOR,'#query')
keyword.clear()
keyword.send_keys('딥러닝')

XPATH를 이용하는 방법

'//' : 최상위
'*' : 자손 태그
'/' : 자식 태그
'div[1]': div 중에서 1번째 태그

# 검색어 작성
driver.find_element(By.XPATH,'//*[@id="query"]').send_keys('루피')
# 검색 클릭
driver.find_element(By.XPATH,'//*[@id="search-btn"]').click()

Selenium과 BeautifulSoup 같이 사용하기

driver.get('https://pinkwink.kr')

driver.page_source

결과가 매우 길어서 생략


from bs4 import BeautifulSoup

req = driver.page_source
soup = BeautifulSoup(req, 'html.parser')

soup.select('.thum')
[<span class="thum"><img alt="" src="//i1.daumcdn.net/thumb/R600x0/?fname=https://blog.kakaocdn.net/dn/cgVkvR/btsCwPOXHn5/jIGU1idsKajPaAJKTHJm7k/img.png"/></span>,
 <span class="thum"><img alt="" src="//i1.daumcdn.net/thumb/R600x0/?fname=https://blog.kakaocdn.net/dn/KQ4JG/btsBl4SA0bo/bXUjndRZdNDgTKAULoRDN1/img.png"/></span>,
 <span class="thum"><img alt="" src="//i1.daumcdn.net/thumb/R600x0/?fname=https://blog.kakaocdn.net/dn/uuBGJ/btsAXhxLpWt/DxYS5rk8BT6sPx2GXVwZlK/img.png"/></span>,
 <span class="thum"><img alt="" src="//i1.daumcdn.net/thumb/R600x0/?fname=https://blog.kakaocdn.net/dn/cgBjsd/btsAH0qMP9Z/uOJMQhrhaNVJgD2KvqwNKK/img.png"/></span>,
 <span class="thum"><img alt="" src="//i1.daumcdn.net/thumb/R600x0/?fname=https://blog.kakaocdn.net/dn/cLcGmM/btsAw5lkuti/QQ5ce7PIsIkoVzStsuYwi0/img.png"/></span>,
 <span class="thum"><img alt="" src="//i1.daumcdn.net/thumb/R600x0/?fname=https://blog.kakaocdn.net/dn/vYGHl/btsz9AzkVLv/XEDuxw2WIn0DdpF0IcPrz0/img.png"/></span>,
 <span class="thum"><img alt="" src="//i1.daumcdn.net/thumb/C264x200/?fname=https://blog.kakaocdn.net/dn/uuBGJ/btsAXhxLpWt/DxYS5rk8BT6sPx2GXVwZlK/img.png"/></span>,
 <span class="thum"><img alt="" src="//i1.daumcdn.net/thumb/C264x200/?fname=https://blog.kakaocdn.net/dn/nWJOK/btsAc2O4tOi/3CKxe7CnJXCgUNpyBgCyb1/img.png"/></span>,
 <span class="thum"><img alt="" src="//i1.daumcdn.net/thumb/C264x200/?fname=https://blog.kakaocdn.net/dn/CL82p/btsz92a4pSt/tcdFXBvyRTKZk0KhXZ9nik/img.png"/></span>,
 <span class="thum"><img alt="" src="//i1.daumcdn.net/thumb/C264x200/?fname=https://blog.kakaocdn.net/dn/cgNM1J/btsy5dRzJhr/Bv6S3evKzcVD4fiFGccx6K/img.png"/></span>]

contents = soup.select('.thum')
len(contents)
10

contents[1]
<span class="thum"><img alt="" src="//i1.daumcdn.net/thumb/R600x0/?fname=https://blog.kakaocdn.net/dn/KQ4JG/btsBl4SA0bo/bXUjndRZdNDgTKAULoRDN1/img.png"/></span>
profile
낭만젊음사랑

0개의 댓글