[제로베이스 데이터 취업스쿨] 23.07.06 스터디 노트

김준호·2023년 7월 7일
0
post-thumbnail

Selenium 기초

1) selenium webdriver 사용하기

  • 가장 먼저 selenium과 chromdriver를 다운받아 줘야 한다.
  • selenium 다운 : conda install selenium
  • chromdriver다운 : 크롬 홈페이지에서 현재 사용하는 chrom버전과 맞는 드라이버 설치
  • 모듈 불러오기
from selenium import webdriver

#window유저라면 드라이버에 꼭 .exe 확장자를 붙여줘야 한다.
#execytable_path는 생략 가능
driver = webdriver.Chrome(executable_path="../driver/chromedriver.exe")

#get("") : 괄호 안의 URL을 드라이버로 열어준다는 명령어
driver.get("https://pinkwink.kr")

상단에 Chrome이 자동화된 테스트 소프트웨어에 의해 저어되고 있습니다.
라는 문구가 나온다.

몇가지 명령어를 알아보자

  • driver 끄기
  • dirver를 불러왔다면 작업을 마치고 항상 꺼줘야 한다.
driver.quit()
  • 화면 최대 크기 설정
driver.maximize_window()
  • 화면 최소 크기 설정
driver.minimize_window()
  • 화면 크기 설정
driver.set_window_size(600,600)
  • 새로고침
driver.refresh()
  • 뒤로 가기
driver.back()
  • 앞으로 가기
driver.forward()
  • 클릭하기 : 태그 값 필요
#By 모듈을 불러와줘야 한다.
from selenium.webdriver.common.by import By

#필요한 요소 해당 드라이버창 개발자도구에서 찾아 copy selector로 복사해오기
first_content = driver.find_element(By.CSS_SELECTOR,
"#content > div.cover-masonry > div > ul > li:nth-child(1)")

#클릭 명령어
first_content.click()
  • 새 탭 생성
#execute_script() : javascript코드를 실행하겠다라는 명령어
#execute_script() 안의 명령어는 javascript의 문법
driver.execute_script("window.open('https://www.naver.com')")
  • 탭 이동
#두번째 탭으로 이동
#만약 옮인 탭을 close로 닫아줬다면 다시window_handles[0]으로 첫번째 드라이버 창으로 바꿔줘야 한다.
driver.switch_to.window(driver.window_handles[1])
  • 탭 닫기
#방법1
driver.close()

#방법2
driver.quit()

2) 화면 스크롤

  • 정보를 가져오기 위해서는 현재 드라이버 창에 보이는 것들만 가져올 수 있다.
  • 그래서 원하는 정보가 있는 곳으로 스크롤 해서 가져와야 할 때가 있다.
  • 위와 같은 이유로 최대창으로 설정해두고 가져오는것이 좋다.
  • 스크롤 가능한 높이(전체 긹이)
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);")
  • 특정 태그 지점까지 스크롤 이동
#ActionChains 불러오기 
from selenium.webdriver import ActionChains

#원하는 태그 변수에 저장
some_tag = driver.find_element(By.CSS_SELECTOR,
'#content > div.cover-list > div > ul > li:nth-child(1)')

#ACtionChains모듈에 현재 사용 중인 driver를 넣어줘서 현재 driver를 이용하겠다.
action = ActionChains(driver)

#move_to_element: 지정한 요소로 움직일거다
#perform() : 준비됐으면 수행 해라
action.move_to_element(some_tag).perform()

3) 검색어 입력

  • 네이버에서 검색어를 써 넣고 검색을 하는 과정을 selenium을 사용해서 해보자.
  • 전체 과정을 요약한다면
    - 검색창에 검색어 입력
    • 검색 버튼 클릭
  • 모듈 불러오기 및 드라이버 창 열기
from selenium import webdriver
from selenium.webdriver.common.by import By
river = webdriver.Chrome("../driver/chromedriver.exe")
driver.get("https://www.naver.com")
  • CSS_SELECTOR
  • find_element()안의 ""안에는 드라이버 창에서 개발자 도구로 원하는 곳(현재는 검색창) 을 추적해서 해당 html코드에서
    오른쪽 키 - Copy - Copy selector
    로 복새해 온다.
  • clear() : 이전에 있던 검색어를 지워준다.
  • send_keys() : ()안의 내용을 작성해준다.
keyword = driver.find_element(By.CSS_SELECTOR, "#query")
keyword.clear()
keyword.send_keys('딥러닝')
  • 검색을 실행하는 버튼을 찾아 위와같이 해당 CSS를 복사해 온다.
  • .click() : 클릭을 한다.
search_btn = driver.find_element(By.CSS_SELECTOR,
"#sform > fieldset > button")
search_btn.click()
  • XPATH
    '//' : 최상위
    '*' : 자손 태그
    '/' : 자식 태그
  • 검색창에 검색어를 입력하고 검색버튼을 누르는 과정은 위와 동일
  • 다른점은 복사해오는 방법이 다르다.
  • find_element(By.XPATH, "") : ""에 복사해오는 것이
    Copy selector 가 아니라 Copy XPath 이다.

검색창이 누른 후 검색어 입력을 해야 할 때

  • 바로 검색창에 검색어를 입력하는 구조가 아니라 검색 버튼을 누르고 검색어를 입력해야 한다면
  • html코드에서 검색창을 누를 때와 안눌렀을 때의 class명이 바뀌는것을 확인했다.
  • 이런 것을 동적이라고 하는데 이때 ActionChains 모듈을 이용하면 된다.
  • 전체 과정을 요약해 보면
    • 돋보기 버튼 클릭
    • 검색어 입력
    • 돋보기 버튼 클릭 해서 검색
  • 모듈 가져오기 및 드라이버 창 열기
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains

driver = webdriver.Chrome("../driver/chromedriver.exe")
driver.get("https://pinkwink.kr")
  • 돋보기 버튼 클릭
search_tag = driver.find_element(By.CSS_SELECTOR, '.search')
action = ActionChains(driver)
action.click(search_tag)
action.perform()
  • 검색어 입력
keyword = driver.find_element(By.CSS_SELECTOR,
"#header > div.search > input[type=text]")
keyword.clear()
keyword.send_keys("딥러닝")
  • 검색 버튼 클릭해서 검색
driver.find_element(By.CSS_SELECTOR, 
"#header > div.search.on > button").click()

4) selenium + beautifulSoup

  • 모듈 가져오기
from bs4 import BeautifulSoup
  • driver.page_source : 현제 페이지 html코드 가져오기
req = driver.page_source
soup = BeautifulSoup(req, "html.parser")
  • 원하는 부분 출력하기
soup.select('.post-item')

업로드중..

profile
취업공부

0개의 댓글