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('딥러닝')
'//' : 최상위
'*' : 자손 태그
'/' : 자식 태그
'div[1]': div 중에서 1번째 태그
# 검색어 작성
driver.find_element(By.XPATH,'//*[@id="query"]').send_keys('루피')
# 검색 클릭
driver.find_element(By.XPATH,'//*[@id="search-btn"]').click()
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>