%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 출력
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초 사이에 응답오면 바로 실행, 아니면 기다림
'''위 코드 생략'''
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 써야겠다 ㅎ