selenium 기초

YJ·2023년 4월 4일
0

▷ 오늘 학습 계획: EDA 강의(유가분석 1~2)

Selenium

selenium documentation
selenium python document

웹 브라우저를 원격 조작하는 도구
자동으로 URL을 열고 클릭 등이 가능
스크롤, 문자의 입력, 화면 캡처 등등
Python 모듈도 설치하고 크롬 드라이버도 받아야 한다.

  • conda install selenium
  • chrome 버전 확인 후, chromedriver 설치

Beautiful Soup 만으로 해결할 수 없는 것

접근할 웹 주소를 알 수 없을 때
자바스크립트를 사용하는 웹페이지
웹 브라우저로 접근하지 않으면 안될 때

selenium webdriver 사용하기

from selenium import webdriver
#from selenium.webdriver.common.by import By
driver = webdriver.Chrome(executable_path='../driver/chromedriver.exe')
#크롬 드라이버의 경로 지정('executable_path='문구 생략 가능)
driver.get('https://pinkwink.kr')  #접근하고 싶은 주소 지정
driver.quit()

01_기본 동작

화면 크기 설정

driver.set_window_size(600,600)
driver.maximize_window()  # 최대 크기 설정
driver.minimize_window()  # 최소 크기 설정

새로 고침

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)')
first_content.click()

새로운 탭 생성

driver.execute_script('window.open("https://www.naver.com")')

탭 이동

driver.switch_to.window(driver.window_handles[0])
len(driver.window_handles)  #이동할 수 있는 탭의 개수

탭 닫기

driver.close() #열려있는 탭 하나씩 닫기
driver.quit()  #전체 탭 모두 종료

02_화면 스크롤

스크롤 가능한 높이(길이)

  • 자바스크립트 코드 실행
driver.execute_script('return document.body.scrollHeight')

화면 스크롤 이동

# 하단으로 이동
driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')
# 상단으로 이동
driver.execute_script('window.scrollTo(0,0);')

현재 보이는 화면 스크린샷 저장

driver.save_screenshot('./last_height.png')
# 정상적으로 실행되면 'True'라고 출력되면서 스크린샷이 저장됨

특정 태그 지점까지 스크롤 이동

from selenium.webdriver import ActionChains
some_tag = driver.find_element(By.CSS_SELECTOR, '#content > div.cover-list > div > ul > li:nth-child(1)')
action = ActionChains(driver)
action.move_to_element(some_tag).perform()

03_검색어 입력

1) CSS_SELECTOR

from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome('../driver/chromedriver.exe')
driver.get('https://naver.com')

키 입력: .send_keys( )

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()

2) XPATH

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

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/chromedriver.exe')
driver.get("https://pinkwink.kr")
# 1. 돋보기 버튼을 선택
from selenium.webdriver import ActionChains
search_tag = driver.find_element(By.CSS_SELECTOR, ".search")
action = ActionChains(driver)
action.click(search_tag)
action.perform()
# 2. 검색어 입력
driver.find_element(By.CSS_SELECTOR, "#header > div.search > input[type=text]").send_keys('딥러닝')
# 3. 검색 버튼 클릭
driver.find_element(By.CSS_SELECTOR, "#header > div.search.on > button").click()

찾은 요소의 속성 값 가져오기

element.get_attribute('속성이름')

04_selenium & beautifulsoup

현재 화면의 html 코드 가져오기

driver.page_source
from bs4 import BeautifulSoup
req = driver.page_source
soup = BeautifulSoup(req, "html.parser")
soup.select('.post-item')
contents = soup.select('.post-item')
len(contents)
contents[2]
driver.quit()

▷ 내일 학습 계획: EDA 강의(유가분석 3~5)

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

0개의 댓글