[TIL 9일차] 데브코스 데이터엔지니어링

heering·2023년 4월 20일
0

TIL 9일차

  • 실습 0 (Selenium 기초)
%pip install selenium
%pip install webdriver-manager # 웹 브라우저와의 연동

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

with webdriver.Chrome(service=Service(ChromeDriverManager().install())) as driver: # 크롬 열렸다가 수행 후 닫힘
    driver.get("http://www.example.com") # 해당 페이지로 요청 보냄
    
    for x in driver.find_elements(By.TAG_NAME, "p"):
        print(x.text) # p 태그인 친구들 모두 소환해서 text 출력
  • 실습 1 (Wait and Call)

Implicit Wait: 특정 요소에 대한 제약을 통한 Wait (예를 들어 특정 tag 가져올 때까지 기다리는 등)
Explicit Wait: 모두 로딩 될 때까지 지정한 시간을 Wait

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")))
from selenium.webdriver.support.ui import WebDriverWait
driver.implicitly_wait(10) # 10초 사이에 응답오면 바로 실행, 아니면 기다림
  • 실습 2 (마우스, 키보드 동작)
'''위 코드 생략'''

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, "heering").perform() # input 태그에 원하는 text 자동 입력
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() # button 마우스로 클릭하는 효과
time.sleep(0.5)
  • XPATH를 사용하는 때: 요즘 웹페이지는 class 이름을 랜덤변수로 기괴하게 설정하는 경향이 있는데, 예쁜 class 이름일 경우 이를 사용해서 악용하는 걸 막기 위함이라 들었다. 이럴 때 개발자 도구에서 해당 태그 오른쪽 마우스 클릭 → Copy 클릭 → Copy XPATH 클릭 후 위 코드처럼 사용하면 된다.

  • Jupyter Lab에서 사용 가능한 마크다운 문법을 복습했다.

  • Colab에서 Selenium 쓰는 법을 영어로 구글링해서 찾은 그 어떤 해결책도 나에게 맞지 않는다.. 😔
    message: service chromedriver unexpectedly exited. status code was: 1
    그냥 Jupyter Notebook 써야겠다 ㅎ

0개의 댓글