EDA - Sleenium 기초

subinii·2024년 4월 12일

DS 25기

목록 보기
23/46

Sleenium 기초

Sleenium Documentation

beautiful soup만으로 해결 할 수 없는 것

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

sleenium

  • 웹 브라우저를 원격 조작하는 도구
  • 자동으로 url을 열고 클릭 등이 가능
  • 스크롤, 문자의 입력, 화면 캡처 등등

Sleenium Basic

Sleenium 설치

conda inatall selenium

Sleenium import

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

웹페이지 실행하기

driver = webdriver.Chrome()
driver.get("url 주소")

Sleenium 탭 닫기

# 현재 탭 닫기 
driver.close()

# 전체 탭 닫기 (마지막에 꼭 실행하기)
driver.quit()

Sleenium 기본

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

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

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

# 새로 고침 
driver.refresh()

# 뒤로 가기
driver.back()

# 앞으로 가기 
driver.forward()

클릭하기

  • find_element : 하나의 정보만 가져올 때
  • find_elements : 여러 개의 정보만 가져올 때
  • click() : 클릭 함수
from selenium.webdriver.common.by import By
first_content = driver.find_element(By.CSS_SELECTOR,"html code copy seclet")
first_content.click()

tap

  • 다중 튜플 안에 (""), ('') 같은 부호 쓰지 않기 => 오류남
# 새로운 탭 생성
driver.execute_script("window.open('url 주소')")

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

# 탭 개수 
len(driver.window_handles)

화면 스크롤


# 스크롤 가능한 높이(길이)
# 화면 크기에 따라 반환 값 달라짐 
driver.execute_script("return document.body.scrollHeight")

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

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

# 현재 보이는 화면 스크린샷 저장, . : 현재 위치 
# bool 타입으로 반환 
driver.save_screenshot("./last_height.png") # ("경로지정", 생략가능)

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

some_tag = driver.find_element(By.CSS_SELECTOR,
                    "html code copy select")
action = ActionChains(driver)
action.move_to_element(some_tag).perform()

검색어 입력

CSS_SELECTOR

  • clear() : 먼저 작성된 글자 지우고 새로운 글자 넣기
# 검색창에 검색어 입력
keyword = driver.find_element(By.CSS_SELECTOR, "#query")
keyword.clear() 
keyword.send_keys("파이썬")

# 검색하기 
secrch_btn = driver.find_element(By.CSS_SELECTOR, "#search-btn")
secrch_btn.click()

XPATH

  • 동적 웹 페이지에서 검색하기 용이함
  • '//' : 최상위
  • '*' : 자손 태그
  • '/' : 자식 태그

정적 웹 페이지

# 검색창에 검색어 입력 
driver.find_element(By.XPATH, '//*[@id="query"]').send_keys("xpath")
# 검색하기
driver.find_element(By.XPATH, '//*[@id="search-btn"]').click()

동적 웹 페이지

ActionChains

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

selenium + beautifulsoup

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

driver.page_source

beautifulsoup을 사용해서 html 코드 가져오기

from bs4 import BeautifulSoup
req = driver.page_source
soup = BeautifulSoup(req, "html.parser")
soup.select(".post-item")

현재 화면의 콘텐츠 개수 확인하기

contents = soup.select(".post-item")
len(contents)

인덱스 3번째 콘텐츠의 html 반환하기

contents[2]

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

profile
데이터 공부 기록

0개의 댓글