일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- VPC
- airflow
- Til
- beuatifulsoup
- 데브코스
- AWS
- Kafka
- Selenium
- Snowflake
- Spark
- 코테 연습
- 코딩테스트
- 슈퍼셋
- Tableau
- superset
- django
- 데이터 엔지니어
- PCCP
- SQL
- 코딩 테스트
- cloud platform
- GCP
- 데이터 시각화
- 팀 프로젝트
- HTML
- Today
- Total
주니어 데이터 엔지니어 우솨's 개발일지
데이터 엔지니어링 9일차 TIL 본문
학습 내용
Selenium 불러오기
라이브러리
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
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 : 대상의 속성
Wait and Call
Implicit Wait(암묵적 기다림) : 다 로딩이 될 때까지 지정한 시간동안 기다림
필요 라이브러리 :
.implicitly_wait(i) : i초 동안 기다림
- 반드시 해당시간을 기다리는 것이 아니라, 로딩이 다 될때까지의 한계 시간을 의미
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import WebDriverWait
with webdriver.Chrome(service=Service(ChromeDriverManager().install())) as driver :
driver.get('https://indistreet.com/live?sortOption=startDate%3AASC')
driver.implicitly_wait(10) #10초 기다림
print(driver.find_element(By.XPATH, '//*[@id="__next"]/div/main/div[2]/div/div[4]/div[1]/div[1]/div/a/div[2]/p[1]').text)
Explicit Wait(명시적 기다림) : 특정 요소에 대한 제약을 통한 기다림
until() : 인자의 조건이 만족될 때까지
until_not() : 인자의 조건이 만족되지 않을 때까지
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
with webdriver.Chrome(service=Service(ChromeDriverManager().install())) as driver :
driver.get('https://indistreet.com/live?sortOption=startDate%3AASC')
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="__next"]/div/main/div[2]/div/div[4]/div[1]/div[1]/div/a/div[2]/p[1]')))
print(element.text)
XPath : XML Path의 줄임말
특정 요소의 위치를 경로로 표현하는것을 의미
ex)//*[@id="__next"]/div/main/div[2]/div/div[4]/div[1]/div[1]/div/a/div[2]/p[1]
ActionChains라이브러리
from selenium.webdriver import ActionChains
마우스 이벤트 처리하기
1. 입력하고자 하는 대상 요소를 찾는다. (find_element() 이용)
2. 입력하고자 하는 내용을 click을 통해 전달.
3. .perform()을 통해 동작한다.
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
# 주어진 웹사이트를 누른 후, 우리가 원하는 버튼 요소를 찾은 후 마우스 이벤트를 실행시켜봅시다.
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get('https://naver.com/')
driver.implicitly_wait(3)
button = driver.find_element(By.CLASS_NAME, "MyView-module__link_login___HpHMW")
ActionChains(driver).click(button).perform()
키보드 이벤트 처리하기
1. 입력하고자 하는 대상 요소를 찾는다. (find_element() 이용)
2. 입력하고자 하는 내용을 send_keys_to_element를 통해 전달.
3. .perform()을 통해 동작한다.
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
import time
# driver를 이용해 해당 사이트에 요청을 보내봅시다.
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get('http://naver.com')
time.sleep(1)
# 내비게이션 바에서 "로그인" 버튼을 찾아 눌러봅시다.
button = driver.find_element(By.CLASS_NAME,"MyView-module__link_login___HpHMW")
ActionChains(driver).click(button).perform()
# "아이디" input 요소에 여러분의 아이디를 입력합니다.
id_input = driver.find_element(By.ID,'id')
ActionChains(driver).send_keys_to_element(id_input,'아이디').perform()
# "패스워드" input 요소에 여러분의 비밀번호를 입력합니다.
ps_input = driver.find_element(By.ID,'pw')
ActionChains(driver).send_keys_to_element(ps_input,'비밀번호').perform()
# "로그인" 버튼을 눌러서 로그인을 완료합니다.
button2 = driver.find_element(By.CLASS_NAME,'btn_login')
ActionChains(driver).click(button2).perform()
Mark Down의 사용법
#(헤더) : 크게 나옴 - 제목 (#의 갯수가 많아질수록 작아진다.)
**(볼드) : 굵게 나옴 *2개를 양쪽에 적어야 한다. - 굵게
Italic(*a*,_a_) : 기울기 - 양쪽에 *또는 _(언더바)를 적어준다.
~a~ : 취소선 양끝에 ~을 넣어준다.
-(Unordered list) : 점을 통한 리스트 -이후 한칸 띄고 내용작성.
1.(Ordered list) : 1. 2. ... 순서 리스트 1. 한칸 띄고 내용작성
`코드` : 코드 작성시에 사용
```코드```: `를 3개 사용 코드블럭 작성
느낀 점
Selenium의 사용이 처음이라 어려울거라 생각했는데 BeautifulSoup이나 Requests의 사용과 큰 차이는 없어서 다행이었다. 어려웠던 점이라면 처음 라이브러리를 추가할 것이 많고 아직 사용이 익숙하지않아 여러 함수 사용시에 헷갈리는 부분이 있다. 익숙해지려면 시간이 걸릴 것 같다. 마크다운 문법의 사용도 배웠는데 TIL 작성시 HTML과 Markdown 두 부분이 존재하는데 필요할 때 사용하면 유용할 것 같다.
'데브코스' 카테고리의 다른 글
데이터 엔지니어링 11일차 TIL (0) | 2024.04.08 |
---|---|
데이터 엔지니어링 10일차 TIL (0) | 2024.04.05 |
데이터 엔지니어링 8일차 TIL (1) | 2024.04.03 |
데이터 엔지니어링 7일차 TIL (0) | 2024.04.02 |
데이터 엔지니어링 6일차 TIL (0) | 2024.04.01 |