[6주차] EDA_10

심하림·2023년 6월 10일
0

EDA

목록 보기
11/14

selenium

matplotlib 한글설정(쉬워진 방법)

!pip install koreanize-matplotlib
import matplotlib.pyplot as plt
import seaborn as sns 
import koreanize_matplotlib
%matplotlib inline 

plt.plot([-1, 0, 1, 2]) # - 부호가 제대로 표기되는지 확인하기 위해 -1 ~ 2 사이 값
plt.title('그래프 한글 테스트')
plt.show()

selenium 문법 업데이트

from selenium.webdriver.common.by import By

# 코드의 자료만 찾기 
driver.find_element(By.XPATH, 'XPATH코드')
# 코드로된 모든 자료 찾기
driver.find_elements(By.XPATH, 'XPATH코드')

# 선택 가능한 옵션들
ID = "id"
NAME = "name"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"

# 바뀐 코드에 적용할 경우
find_element(By.ID, "id")
find_element(By.NAME, "name")
find_element(By.XPATH, "xpath")
find_element(By.LINK_TEXT, "link text")
find_element(By.PARTIAL_LINK_TEXT, "partial link text")
find_element(By.TAG_NAME, "tag name")
find_element(By.CLASS_NAME, "class name")
find_element(By.CSS_SELECTOR, "css selector")

기존 : find_element_by_css_selector('tag')
현재 : find_element(BY.CSS_SELECTOR('tag'))

참고 : https://selenium-python.readthedocs.io/locating-elements.html

selenium을 사용하는 이유

  • BeautifulSoup만으로 해결할 수 없는 것

  • 접근할 웹 주소를 알 수 없을때
  • 자바스크립트를 사용하는 웹페이지
  • 웹 브라우저로 접근하지 않으면 안될떄
    - 동적페이지 / 서버내부적 변화(페이지가 새로생성 또는 컨텐츠확대)
    - 프로그램내에서 웹브라우저를 원격 조작하는 도구
    • 자동으로 URL을 열고 클릭 등이 가능
    • 스크롤, 검색어 입력, 화면 캡처 등등

selenium3 --> selenium4 업그레이드

업그레이드관련 참고 사이트

https://m.blog.naver.com/swimmingsdesign/223034723268

selenium Basic

# 브라우저 종료
driver.quit()
# 화면 확대 크기 설정(스테이크, 함수)
driver.maximize_window()
# 화면 최소 크기 설정
driver.minimize_window()
# 화면 크기 설정
driver.set_window_size(1000, 1000)
# 새로고침
driver.refresh()
# 뒤로 가기
driver.back()
# 앞으로 가기
driver.forward()
# 새로고침
driver.refresh()

1. 필요한 정보 찾기

# 클릭
driver.find_element(By.CSS_SELECTOR, "css_selector코드").click()
# 새로운 탭 생성
driver.execute_script("window.open('site주소')")
# 탭 이동
driver.switch_to.window(driver.window_handles[2])
# 탭 이동 가능 갯수
len(driver.window_handles)
# 탭 닫기
driver.close()
# 전체 종료
driver.quit()

2. 화면 스크롤

# 자바 스크립트 코드 이용
driver.execute_script
# 스크롤 가능한 높이(길이)
# 자바스크립트 코드 실행
# 화면 비율에 따라 높이는 달라질 수 있다
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);")

ActionChanin

참고 : https://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains

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

some_tag = driver.find_element(By.CSS_SELECTOR, "css_selector코드")
action = ActionChains(driver)
action.move_to_element(some_tag).perform()

3. 검색어 입력

ActionChains

# 지정장소에 키워드 입력
keyword = driver.find_element(By.CSS_SELECTOR, "css_selector코드")
keyword.send_keys('파이썬')
# 조회, 검색 버튼 클릭
search_btn = driver.find_element(By.CSS_SELECTOR, "#search-btn")
search_btn.click()
# 직전 검색어 지우고 재검색
keyword = driver.find_element(By.CSS_SELECTOR, "css_selector코드")
keyword.clear()
keyword.send_keys('딥러닝')
search_btn = driver.find_element(By.CSS_SELECTOR, "css_selector코드")
search_btn.click()

- XPATH

  • selenium에서 사용 가능
  • BeautifulSoup에서는 사용 불가능
'//' : 최상위(경로중 최상위 루트)
'*' : 자손 태그(하위 태그-최상위태그의 두번쨰)
'/' : 자식 태그(최상위태그의 첫번쨰)
'div[1]' : div중에서 1번빼 태그

//*[@id="main_pack"]/section[1]/div/div[2]/panel-list/div/ul/li[3]/div/div/a
# 지정장소에 키워드 입력
driver.find_element(By.XPATH, '//*[@id="query"]').send_keys('xpath')
# 조회, 검색 버튼 클릭
bnt = driver.find_element(By.XPATH, '//*[@id="sform"]/fieldset/button')
bnt.click()

4. selenium +beautifulsoup

  • import 선언
  • selenium, beautifulsoup이용한 코드이용
    - .class, #id

오류코드

참고 : https://blog.naver.com/swimmingsdesign/223034723268

  • 오류
  • 교육영상과 현재 selenium버전이 3에서 4로 변경되면서 생기는 오류
  • 해결
    - Service import

0개의 댓글