4.5 Selenium 기초1

소리·2023년 10월 10일
0

Selenium 개념

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

Beautiful Soup 만으로 해결할 수 없는 게 있지 때문!

  • 접근할 웹 주소를 알 수 없을 때
  • 자바 스크립트를 사용하는 웹페이지일 때 - 자바스크립트 언어를 쓸 때가 있음
  • 웹 브라우저로 접근하지 않으면 안될 때(웹 브라우저 원격조정, 스크롤, 화면 캡처, 자동으로 url를 열고 클릭 가능)

.
.

설치

conda install selenuim 으로 설치해야 한다.

from selenium import webdriver

driver = webdriver.Chrome('./chromedriver') #크롬 드라이버의 경로 지정, 새로운 창이 뜨게 함
driver.get('http://pinkwink.kr/) #get 명령으로 접근하고 싶은 주소 지정

.
.

웹페이지 접근

from selenium import webdriver  #크롬 드라이버 실행

driver  = webdriver.Chrome(executable_patch = './chromedriver')  #경로 지정, 상대경로는 환경에 따라 달라짐! 'path='은 생략 가능 
driver.get('http://pinkwink.kr/') #get 명령으로 접근하고 싶은 주소 지정


driver.quit()

🔑 selenium document를 검색해서 셀레니움 사이트에 들어가면 사용 설명서가 나와있느니 잘 사용할 것! 링크

.
.

기본 동작

  • 명령어 driver 안에 웹 드라이버를 제어할 수 있는 기능이 들어있음.
    보이는 화면에 내가 이용하려는 태그가 보여야 하며, 보이지 않을 시 Error 발생
    한 화면에 많이 보이면 유리한 특징이 있다.
    그래서 크기설정과 스크롤 동작을 가장 기본으로 배우는 것

  • 화면 최대크기 설정 함수 : 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, '여기에 해당 태그의 copy selector 링크를 가져오면 됨')
first_content.click()
  • 새로운 탭 생성 : driver.execute_script('window.open('주소')')
  • 탭 이동 : driver.switch_to.window(driver.windeow_handles[0])
  • 탭 닫기 : driver.close()
  • 전체 종료 : driver.quit()

.
.

화면 스크롤

  • 자바 스크립트를 이용해 화면 스크롤 가능한 높이(길이 반환)
    : driver.execute_script('return document.body.scrollHight')

  • 화면 스크롤 하단 이동 : driver.execute_script('window.scrollTo(0, document.body.scrollHight);')

  • 화면 스크롤 상단 이동 : driver.execute_script('window.scrollTo(0, 0);')

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

from selenium.webdriver import ActionChains

some_tag = driver.find_element(By.CSS_SELECTOR, '태그')
action = ActionChains(driver)
action.move_to_element(some_tag).perform()

🔎 ActionChains : 마우스 움직이거나 클릭, 드래그하는 등의 기능을 복합적으로 사용할 수 있도록 함

  • 현재 보이는 화면 스크린샷 저장 : driver.save_screenshot('./last_height.png')
    #위치.이름.확장자를 적어준다
  • hover : 커서를 원하는 위치에 가져다 댔을 떄 발동되는 일조의 전환 효과

.
.

검색어 입력

동일한 방법이지만 태그를 찾는 방법만 다른 CSS_SELECTOR 과 XPATH

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

driver = webdriver.Chrome('../driver/chromedriver')
driver.get('주소') #웹 페이지 연결

keyword = driver.find_element(By.CSS_SELECTOR, '설렉터 주소') #입력창 찾기
keyword.clear() #입력 창 초기화
keyword.send_keys('파이썬') #'파이썬' 입력

search_btn = driver.find_element(By.CSS_SELECTOR., '주소') #검색버튼 클릭
search_btn.click()
  • XPATH
    ※ BeautifulSoup 에서는 사용할 수 없음
driver.find_element(By.XPATH, '엑스패스 주소').send_keys('xpath') #xpath 입력
driver.find_elemnet(By.XPATH, '엑스패스 주소').click #클릭

'//' : 최상위
'/' : 자식 태그 (바로 밑)
'*' : 자손 태그 (자식 태그 아래)
'div[i]' : div 중에서 1번째 태그

selenium과 beautifulsoup를 함께 사용하기

driver.page_source #현재 화면 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)
contents[2]
profile
데이터로 경로를 탐색합니다.

0개의 댓글