반원 블로그

3. selenium : 웹 드라이버 제어를 통한 자동화 본문

2018~/Python Skill Up

3. selenium : 웹 드라이버 제어를 통한 자동화

반원_SemiCircle 2019. 9. 5. 17:38

개요

  • 웹 브라우저에 맞는 웹 드라이버를 이용한 자동화
  • 각 브라우저마다 해당 드라이버가 존재한다.
  • 레퍼런스 : 참조

운영 OS

  • 윈도우, 맥

기타

  • 크롬드라이버 다운로드 : 참조
  • 예전 selenium코드를 참조해야할 때 주의해야할 점은 현재 버전(2.0)은 WebDriver를 이용한 제어이기 때문이다. 따라서 코드상에서 WebDriver를 생성할 때 실제 WebDriver파일을 넣어주지않는다면 Selenium 1.0 기준으로 작성된 것이니 수정해야한다.
  • Selenium 1.0 + 웹 드라이버 = Selenium 2.0 : 참조
  • 위의 링크에 웹 브라우저마다의 웹 드라이버 이름을 확인할 수 있다.
  • 해당 링크에서 웹 브라우저마다의 웹 드라이버 다운로드 링크가 있다.참조

코드(함수, 변수)

driver = webdriver.Chrome('chromedriver')
driver.get("https://www.youtube.com/")
driver.implicitly_wait(100)

implicitly_wait(암묵적 대기)는 즉시 사용할 수없는 요소를 찾으려고 할 때 WebDriver에 일정 시간 동안 DOM을 폴링하도록 지시합니다. 기본 설정은 0. 일단 설정되면 WebDriver 오브젝트가 작동하는 동안 계속 적용됩니다. 그 외에는 WebDriverWait(명시적 대기)가 존재한다.참조

마우스,키보드 제어(ActionChains)

  • ActionChains은 마우스 움직임, 마우스 버튼 동작, 키 누름 및 상황에 맞는 메뉴 상호 작용과 같은 낮은 수준의 상호 작용을 자동화하는 방법
  • 전체 레퍼런스 : 참고
  • click(on_element=None) : 참고
  • click_and_hold(on_element=None) : 참고
  • double_click(on_element=None) : 참고
  • drag_and_drop(source, target) : 참고
  • key_down(value, element=None) : 참고
  • key_up(value, element=None) : 참고
  • send_keys(*keys_to_send) : 참고

요소(Element)에 접근하는 방법

  • Locating by Id
  • Locating by Name
  • Locating by XPath
  • Locating Hyperlinks by Link Text
  • Locating Elements by Tag Name
  • Locating Elements by Class Name
  • Locating Elements by CSS Selectors

특수키 전송을 하려면?

from selenium.webdriver.common.keys import Keys

연습 예제 1

#크롬 창 활성화
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

#자동화 웹 브라우저 활성화
driver = webdriver.Chrome('./chromedriver')

#사이트 접속
driver.get('https://www.naver.com/')
driver.implicitly_wait(200) #사이트 활성화 기다리기

#xpath를 이용한 요소 찾기
search = driver.find_element_by_xpath('//*[@id="query"]') #네이버 검색창
search.send_keys('디랩')
search.send_keys(Keys.ENTER)

#자동종료
time.sleep(5)
driver.close()

xpath란?

  • XPath란 XML Path Language를 의미
  • XPath는 XML 문서의 특정 요소나 속성에 접근하기 위한 경로를 지정하는 언어입니다.
  • XPath는 W3C 표준 권고안으로, XSLT와 XPointer에 사용될 목적으로 만들어졌습니다.
  • XML DOM에서 노드를 검색할 때에도 사용할 수 있습니다.

HTML 과 XML

  • HTML과 XML은 마크업 언어라는 점에서 같으나, 목적(데이터 표현 VS 데이터 교환)이 달라서 발전방향도 다르다.
  • HTML은 정해진 태그만 XML은 사용자가 태그를 정의하여 사용할 수 있다.
  • HTML은 인터넷 웹 환경에서 작동하는 언어라면 XML은 특정 환경에 제한되있지 않다.
  • HTML은 데이터와 표현(웹 브라우저에 반영)을 동시에, XML은 데이터의 의미만 존재한다.

결론적으로 HTML도 XML과 구조상은 유사하며 XPATH방식으로 특정 태그의 경로를 표현할 수 있다.

XPATH 표현법

  1. 경로표현식 : 특정 요소(XML에서는 노드)를 선택하기위한 표현식 참고
  2. 필터표현식 : 특정 요소(노드)나 특정 값을 포함하는 요소(노드)를 선택하기 위한 표현식 참고

연습 예제 2

from selenium import webdriver

#열기
driver = webdriver.Chrome('./chromedriver')

#사이트 접속
driver.get('http://zzzscore.com/1to50')
driver.implicitly_wait(200) #사이트 활성화 기다리기
num = 1 #찾아야될 숫자

while num <= 50:
    #각 버튼 추출
    btns = driver.find_elements_by_xpath('//*[@id="grid"]/div[*]')
    # print(len(btns))
    # print(btns[0].text)

    #정답 찾아서 클릭
    for btn in btns:
        if btn.text == str(num) : #"1"
            btn.click()
            num += 1
            break

추가 참고

간단 웹 게임 자동화
인스타그램 자동화

Comments