/ LECTURE

Python - Selenium

이 페이지는 다음에 대한 공부 기록입니다

JAVA(자바), Python(파이썬) 기반의

AI 활용 응용 소프트웨어 개발자 양성 과정

2021.11.10. ~ 2022.05.18.

찾으시는 정보가 있으시다면
주제별reference를 이용하시거나
우측 상단에 있는 검색기능을 이용해주세요

82일차 수업

selenium

웹용 어플을 테스트하기 위해 만들어 놓은 프레임워크(모듈)

웹페이지를 원격으로 조작이 가능하도록 도와주는 도구

자동으로 url을 열고, 동작을 조작할 수 있도록 지원

  • webdriver : 셀레니움으로 웹 브라우저를 제어하기 위한 도구
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

def set_chrome_driver():
    chrome_options = webdriver.ChromeOptions()
    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
    return driver

driver = set_chrome_driver()

# 페이지 호출
driver.get(https://spongebob53.github.io/)
# 웹 자원 로드 되는 시간이 있다보니 암묵적으로 2초 정도 딜레이를 줌
driver.implicitly_wait(2)
driver.save_screenshot(screenshot/main.png)
# 굽네 전국 매장 스크래핑 해보기
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.ui import WebDriverWait
# webdriver을 관리해주는 모듈
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup

def set_chrome_driver():
    options = webdriver.ChromeOptions()
    driver = webdriver.Chrome(service = Service(ChromeDriverManager().install()), options=options)
    return driver

driver = set_chrome_driver()
driver.get(https://www.goobne.co.kr/store/search_store.jsp)
i = 1
while 1:
    # 임의로 기다리는 방법말고, 필요한 특정 요소가 로딩될 때까지 기다리는 방법도 있음
    WebDriverWait(driver, 2).until(expected_conditions.presence_of_all_elements_located((By.CLASS_NAME, lows)))
    html = driver.page_source
    soup = Beatifulsoup(html, html.parser)
    stores = soup.find_all(tr, {class: lows})
    for store in stores:
        storename = store.find(td).text
        print(storename)
    if len(stores) < 10:
        break
    i += 1
    driver.execute_script(fstore.getList({i}))

Method

selenium 은 driver객체를 통해 여러 메소드를 제공함

from selenium.webdriver.common.by import By # 함께 쓰임

find_element(by = By.NAME, value = name )
find_element(by = By.ID, value = id )
find_element(by = By.CSS_SELECTOR, value = css 선택자)
find_element(by = By.CLASS_NAME, value = 클래스 )
find_element(by = By.TAG_NAME, value = 태그 )
find_element(by = By.XPATH, value = xpath 지정)
find_element(by = By.LINK_TEXT, value = 링크 텍스트)

find_elements()를 이용하면 모든 결과를 취합해 리스트로 반환

DOM

| method | Description | |:———————–:|:———————-| | clear() | 글자 지우기 | | click() | 클릭 | | get_attribute(A) | 요소의 속성 중 A에 해당하는 값 추출 | | is_displayed() | 요소가 화면에 출력되는지 확인 | | is_enabled() | 요소가 이용가능한지 확인 | | is_selected() | 요소가 선택되었는지 확인 | | save_screenshot(경로+파일명) | 스크린샷을 해당 경로에 파일명으로 저장 | | submit() | 제출하기 | | send_keys() | 글자 입력 | | execute_script() | 자바스크립트 사용 | | back(), forward() | 뒤로가기, 앞으로가기 |

common.keys

key Description
ADD ‘\ue025’
ALT ‘\ue00a’
ARROW_DOWN ‘\ue015’
ARROW_LEFT ‘\ue012’
ARROW_RIGHT ‘\ue014’
ARROW_UP ‘\ue013’
BACKSPACE ‘\ue003’
BACK_SPACE ‘\ue003’
CANCEL ‘\ue001’
CLEAR ‘\ue005’
COMMAND ‘\ue03d’
CONTROL ‘\ue009’
DECIMAL ‘\ue028’
DELETE ‘\ue017’
DIVIDE ‘\ue029’
DOWN ‘\ue015’
END ‘\ue010’
ENTER ‘\ue007’
EQUALS ‘\ue019’
ESCAPE ‘\ue00c’
F1 ‘\ue031’
F10 ‘\ue03a’
F11 ‘\ue03b’
F12 ‘\ue03c’
F2 ‘\ue032’
F3 ‘\ue033’
F4 ‘\ue034’
F5 ‘\ue035’
F6 ‘\ue036’
F7 ‘\ue037’
F8 ‘\ue038’
F9 ‘\ue039’
HELP ‘\ue002’
HOME ‘\ue011’
INSERT ‘\ue016’
LEFT ‘\ue012’
LEFT_ALT ‘\ue00a’
LEFT_CONTROL ‘\ue009’
LEFT_SHIFT ‘\ue008’
META ‘\ue03d’
MULTIPLY ‘\ue024’
NULL ‘\ue000’
NUMPAD0 ‘\ue01a’
NUMPAD1 ‘\ue01b’
NUMPAD2 ‘\ue01c’
NUMPAD3 ‘\ue01d’
NUMPAD4 ‘\ue01e’
NUMPAD5 ‘\ue01f’
NUMPAD6 ‘\ue020’
NUMPAD7 ‘\ue021’
NUMPAD8 ‘\ue022’
NUMPAD9 ‘\ue023’
PAGE_DOWN ‘\ue00f’
PAGE_UP ‘\ue00e’
PAUSE ‘\ue00b’
RETURN ‘\ue006’
RIGHT ‘\ue014’
SEMICOLON ‘\ue018’
SEPARATOR ‘\ue026’
SHIFT ‘\ue008’
SPACE ‘\ue00d’
SUBTRACT ‘\ue027’
TAB ‘\ue004’
UP ‘\ue013’