728x90
프로그래머스 인공지능 데브코스 2주차 강의를 정리한 글입니다.
동적 웹 페이지
- 정적 웹 사이트: HTML 내용이 고정
- 동적 웹 사이트: HTML 내용이 변함
- ex) 피드를 새로고침할 때마다 새로운 글이 올라오는 것
- 응답이 된 후 렌더링이 될 때 까지의 지연시간 존재
→ request 이후 바로 parsing을 하면 안될 수 있다
-데이터 처리가 완전히 되지 않은 상태에서 request하면 불완전한 데이터 받을 수 있다.
→ 임의로 시간을 지연한 후 데이터 처리가 끝난 후 정보를 가져오는 비동기처리
가 필요하다.
→ 키보드 입력, 마우스 클릭 등을 할 수 있도록 웹 브라우저를 파이썬으로 조작하는 Selenium
활용!
Selenium
Selenum
: 웹 브라우저를 조작하는 라이브러리WebDriver
: 웹 브라우저를 제어할 수 있는 자동화 프레임워크install webdriver-manager
#webdriver 모듈 불러오기
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("http://www.example.com")
webdriver 모듈에서 Chrome()객체를 생성하고, 특정 페이지를 열도록 요청을 보낸다.
with webdriver.Chrome(service=Service(ChromeDriverManager().install())) as driver:
driver.get("http://www.example.com")
print(driver.page_source) # html 문서 확인
자동으로 크롬 창이 닫히게 하기 위해 with as
구문을 이용할 수 있다.
driver에서 특정 요소 추출하기
- 요소 하나 찾기:
.find_element(by, target)
by
: 대상을 찾는 기준 :ID
,TAG_NAME
,CLASS_NAME
, ...target
: 대상의 속성
- 요소 여러개 찾기:
.find_elements(by, target)
by
: 대상을 찾는 기준 :ID
,TAG_NAME
,CLASS_NAME
, ...target
: 대상의 속성
from selenium.webdriver.common.by import By
# p 태그에 해당하는 요소 하나 찾기
with webdriver.Chrome(service=Service(ChromeDriverManager().install())) as driver:
driver.get("http://www.example.com")
print(driver.find_element(By.TAG_NAME, "p").text)
# p 태그에 해당하는 요소 여러개를 찾기
with webdriver.Chrome(service=Service(ChromeDriverManager().install())) as driver:
driver.get("http://www.example.com")
for element in driver.find_elements(By.TAG_NAME, "p"):
print("Text:", element.text)
wait and call
implicit wait
- 지정한 시간동안 기다림: ex) 5초간 기다려!
driver.implicitly_wait(10)
: 10초간 기다리되, 그 전에 렌더링이 끝나면 바로 실행
explicit wait
- 특정 요소에 대한 제약을 통한 기다림: ex) 이 태그를 가져올 수 있을 때까지 기다려!
WebDriverWait()
until
: 인자의 조건이 만족될 때까지until_not()
인자의 조건이 만족되지 않을 때까지
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
# ID가 `target`인 요소가 존재할 때까지 기다린 후 다음 명령 진행
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "target")))
마우스 이벤트 처리하기
예를 들어 버튼을 찾은 후 이를 클릭하는 경우
1) find_element()
를 통해 버튼 찾기
2) click
으로 클릭 동작 전달
3) .perform()
을 통해 동작
# id가 button인 버튼을 찾아 클릭하는 예시
button = driver.find_element(By.ID, "button")
ActionChains(driver).click(button).perform() # 액션들을 하나로 묶어줌
클릭 이외의 이벤트들 입력법은 >여기<
키보드 이벤트 처리하기
예를 들어 입력창(input
태그)에 키보드 입력하는 경우
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()
그 외 키보드 이벤트들 입력법은 >여기<
실습: 자동 로그인하기
# 네이버에 요청 보내기
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://www.naver.com/")
driver.implicitly_wait(10)
time.sleep(1)
# 로그인 버튼 찾기
button = driver.find_element(By.CLASS_NAME, "MyView-module__naver_logo____Y442")
ActionChains(driver).click(button).perform()
time.sleep(1)
# 아이디 입력
id_input = driver.find_element(By.ID,"id")
ActionChains(driver).send_keys_to_element(id_input,"idhere").perform()
time.sleep(2)
# 패스워드 입력
pw_input = driver.find_element(By.ID,"pw")
ActionChains(driver).send_keys_to_element(pw_input,"passwordhere").perform()
time.sleep(1)
# 로그인 버튼 누르기
button = driver.find_element(By.ID, "log.login")
ActionChains(driver).click(button).perform()
time.sleep(1)
728x90
'인공지능 데브코스 6기' 카테고리의 다른 글
[인공지능 데브코스 TIL] 0921 Deep Learning: 신경망의 기초 - 기계학습 (0) | 2023.09.28 |
---|---|
[인공지능 데브코스 TIL] 0831 웹 스크래핑 기초 (4): Seaborn, WordCloud (0) | 2023.09.08 |
[인공지능 데브코스 TIL] 0829 웹 스크래핑 기초 (2): BeautifulSoup4 (0) | 2023.09.07 |
[인공지능 데브코스 TIL] 0828 웹 스크래핑 기초 (1): HTTP 요청 주고받기 (0) | 2023.09.02 |
파이썬을 무기로, 코딩테스트 광탈을 면하자! 정리 (2) (0) | 2023.08.30 |