In [1]:
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
3-5. 키보드 이벤트 처리하기¶
- Selenium을 이용해서 키보드 Event를 동작해봅시다.
Keyboard Event¶
웹 페이지에서 일어나는 일들을 Event라고 합니다.
키보드로 일어날 수 있는 대표적인 이벤트는 다음과 같습니다.
- 키보드 누르기(press down)
- 키보드 떼기(press up)
- ...
저희는 입력창(input 태그의 form)에 키보드 입력을 진행하는 것을 목표로 합니다.
키보드 입력은 크게 다음과 같은 과정을 거칩니다.
- 입력하고자 하는 대상 요소를 찾습니다. (
find_element()이용) - 입력하고자 하는 내용을
send_keys_to_element를 통해 전달합니다. .perform()을 통해 동작합니다.
아래 예시는 id가 textInput인 요소에 "abc"를 입력하는 예제입니다.
text_input = driver.find_element(By.ID, "textInput")
ActionChains(driver).send_keys_to_element(text_input, "abc").perform()
Target: 해시코드 로그인하기¶
다음 사이트에 Selenium을 이용해서 로그인을 진행해봅시다 : https://hashcode.co.kr
In [2]:
# 스크래핑에 필요한 라이브러리를 불러와봅시다.
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
지난 실습에서 다룬 마우스 실습을 통해 로그인 창에 접속하는 것에 성공했는데요,
여기에 이제 키보드 입력을 넣어서 로그인을 완료해봅시다.
In [4]:
# driver를 이용해 해당 사이트에 요청을 보내봅시다.
import time
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.maximize_window()
driver.get("https://hashcode.co.kr")
time.sleep(0.5) # 일정시간 기다려주지 않고 너무 빠르게 진행하면 에러가 날 수도 있으므로 예방차원에서 조금 기다리는 시간을 가졌다.
# 내비게이션 바에서 "로그인" 버튼을 찾아 눌러봅시다.
button = driver.find_element(By.XPATH, '//*[@id="main-app-header"]/header/section/div/div/div/a[1]')
ActionChains(driver).click(button).perform()
# time.sleep(0.5)
# "아이디" input 요소에 여러분의 아이디를 입력합니다.
id_input = driver.find_element(By.XPATH, '//*[@id="main-app-account"]/div/div[2]/div/div[2]/div[1]/div/div[2]/div[2]/input')
ActionChains(driver).send_keys_to_element(id_input, "내 아이디 입력").perform()
time.sleep(0.5)
# "패스워드" 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, "내 비밀번호 입력").perform()
time.sleep(0.5)
# "로그인" 버튼을 눌러서 로그인을 완료합니다.
login_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(login_button).perform()
time.sleep(0.5)
이렇게 저희가 로그인을 손 대지 않고 진행하는 실습을 진행해보았습니다.
이를 바탕으로 로그인이 필요한 정보를 스크래핑할 수 있겠죠? :)
Tip: 이 외에도 사용할 수 있는 키보드 이벤트들 역시 많습니다. 다음 링크를 통해 확인하실 수 있어요!
'웹 스크래핑(Web scraping)' 카테고리의 다른 글
| Selenium - 마우스 이벤트 처리하기 (0) | 2023.10.26 |
|---|---|
| Selenium - Explicit Wait과 Implicit Wait (0) | 2023.10.26 |
| Selenium의 기초 WebDriver (0) | 2023.10.26 |
| 요청시 헤더의 수정과 페이지네이션(Pagination) (0) | 2023.10.25 |
| 스크래핑할 요소의 타게팅 - ID & Class (0) | 2023.10.25 |