웹 브라우저 자동화 - Selenium : 3-5. 키보드 이벤트 처리하기

임동윤·2022년 9월 29일
0

웹 스크래핑 기초

목록 보기
15/20
post-thumbnail

Keyboard Event

  • 웹 페이지에서 일어나는 모든 일들을 Event 라고 합니다.
  • 키보드로 발생할 수 있는 대표적인 이벤트는 다음과 같습니다.
    • 키보드 누르기(press down)
    • 키보드 떼기(press up)

예시

  • 입력창(input 태그의 form)에 키보드 입력을 진행하는 것을 목표로 할때, 키보드 입력은 크게 다음과 같은 과정을 거칩니다.

    1. 입력하고자 하는 대상 요소를 찾습니다. (find_element() 이용)
    2. 입력하고자 하는 내용을 send_keys_to_element를 통해 전달합니다.
    3. .perform()을 통해 동작합니다.
  • id가 textInput인 요소에 "abc"를 입력하는 코드입니다.
text_input = driver.find_element(By.ID, "textInput")
ActionChains(driver).send_keys_to_element(text_input, "abc").perform()

연습문제

다음 사이트에 Selenium을 이용해서 로그인을 진행해봅시다 : https://hashcode.co.kr

  • 먼저 스크래핑에 필요한 라이브러리를 불러옵니다.
from selenium import webdriver
from selenium.webdriver import ActionChains
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver import Keys, ActionChains
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
  • driver를 이용해 해당 사이트에 요청을 보냅니다.
import time

driver = webdriver.Chrome(service = Service(ChromeDriverManager().install()))
driver.get("https://hashcode.co.kr/")
time.sleep(1)
  • 내비게이션 바에서 "로그인" 버튼을 찾아 마우스 이벤트를 실행합니다.
button = driver.find_element(By.CLASS_NAME,"nav-link.nav-signin")
ActionChains(driver).click(button).perform()
time.sleep(1)
  • 아이디 input 요소를 찾아 아이디를 입력해 키보드 이벤트를 실행합니다.
id_input = driver.find_element(By.NAME, "email")
ActionChains(driver).send_keys_to_element(id_input,"your_id").perform()
time.sleep(1)
  • 패스워드 input 요소를 찾아 비밀번호를 입력해 키보드 이벤트를 실행합니다.
pw_input = driver.find_element(By.XPATH, '//*[@id="main-app-account"]/div/div[2]/div/div[2]/div[1]/div/div[2]/div[4]/input')
ActionChains(driver).send_keys_to_element(pw_input,"your_pw").perform()
time.sleep(1)
  • 로그인 버튼을 눌러서 로그인을 완료합니다.
button = driver.find_element(By.XPATH,'//*[@id="main-app-account"]/div/div[2]/div/div[2]/div[1]/div/div[2]/button')
ActionChains(driver).click(button).perform()
time.sleep(1)

profile
AI Tensorflow Python

0개의 댓글