728x90
반응형
SMALL
2주차 목요일, 9일차 Today I Learned
웹 데이터 크롤 및 분석 (4)
: 셀레니움 (Selenium)
반응형
✏️ 학습 내용
1. 브라우저 자동화하기, Selenium
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) # 크롬 드라이버 실행
driver.get("# http://www.example.com")
print(driver.page_source)
with webdriver.Chrome(service=Service(ChromeDriverManager().install())) as driver :
driver.get("# http://www.example.com")
print(driver.page_source)
2. Wait and Call
스크래핑을 방지하기 위해 클래스명을 랜덤하게 생성하는 경우가 존재한다. 이러한 경우에 위치를 활용한 방법을 이용할 수 있는데, 이 때에 XPath를 이용한다. XPath는 XML, HTML 문서 등의 요소의 위치를 경로로 표현한 것이다.
태그 우측 클릭 후 [copy XPath] 를 이용하면 XPath를 가져올 수 있다.
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)
print(driver.find_element(By.XPATH, '//*[@id="__next"]/div/main/div[2]/div/div[4]/div[1]/div[2]/div/a/div[2]/p[1]'))
from selenium.webdriver.support.ui 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[2]/div/a/div[2]/p[1]")))
print(element.text)
3. 이벤트 처리하기
# 크롬 브라우저 오픈 -> 링크 접속 -> 잠시 대기
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://hashcode.co.kr/")
driver.implicitly_wait(0.5)
# 클래스 이름이 nav-link.nav-signin인 요소 찾기 -> 그것을 눌러라
button = driver.find_element(By.CLASS_NAME, "nav-link.nav-signin")
ActionChains(driver).click(button).perform()
# "아이디" input 요소에 아이디를 입력
id_input = driver.find_element(By.ID, "user_email")
ActionChains(driver).send_keys_to_element(id_input, "(id 입력하기)".perform()
time.sleep(1)
# "패스워드" input 요소에 비밀번호를 입력
pw_input = driver.find_element(By.ID, "user_password")
ActionChains(driver).send_keys_to_element(pw_input, "(pw 입력하기)".perform()
time.sleep(1)
# "로그인" 버튼을 눌러서 로그인을 완료
button = driver.find_element(By.ID, "btn-sign-in")
ActionChains(driver).click(login_button).perform()
time.sleep(1)
4. Jupyter Lab
# 주피터 랩 설치하기
%pip install jupyterlab
%pip3 install jupyterlab
%python -m pip install jupyterlab
code 모드와 markdown 모드 구분하여 사용하면 편하다.
☁️ 소감
배우고자 하는 내용은 간단하지만 코드 자체는 다소 길어졌다. 그래도 한 번 작성하면 계속 유용하게 사용할 수 있을 것 같다.
728x90
반응형
LIST