Selenium

star_is_mine·2022년 12월 20일
0
post-thumbnail

Link to Selenium 공식문서

ChromeDriverManager

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys


# 최신 크롬 드라이버 설치
driver = webdriver.Chrome(executable_path=ChromeDriverManager().install(), options=options)  
driver.get(url)
driver.implicitly_wait(10)

.is_displayed()

  • 특정 엘리먼트가 존재하는지 여부 판별
...
driver.find_element(By.LINK_TEXT, "다음").is_displayed()
or
driver.find_element(By.PARTIAL_LINK_TEXT, "다음").is_displayed()

# OUTPUT : True or False

expected_conditions as EC

from selenium.webdriver.support import expected_conditions as EC

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://chancoding.tistory.com/199")

# wait until someid is clickable
wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID, 'someid')))
  • 위 코드설명
  1. 위 코드는 ID가 someid인 element가 clickable이 될 때까지 기다리고,
  2. clickable이 되면 그 element를 리턴하는 코드입니다.
  3. wait.until()은 특정 조건이 만족될 때까지 기다리고 그 element를 리턴합니다.

  • clickable 이외에 조건들.
EC.title_is(...)
EC.title_contains(...)
EC.presence_of_element_located(...)
EC.visibility_of_element_located(...)
EC.visibility_of(...)
EC.presence_of_all_elements_located(...)
EC.text_to_be_present_in_element(...)
EC.text_to_be_present_in_element_value(...)
EC.frame_to_be_available_and_switch_to_it(...)
EC.invisibility_of_element_located(...)
EC.element_to_be_clickable(...)
EC.staleness_of(...)
EC.element_to_be_selected(...)
EC.element_located_to_be_selected(...)
EC.element_selection_state_to_be(...)
EC.element_located_selection_state_to_be(...)
EC.alert_is_present(...)

selenium 'Options'

selenium 'Options' 에 대한 정보를 업데이트 해주세요.

(제목미정)

참조한 블로그 링크

driver.set_page_load_timeout(10)

  • 드디어 찾았다.

  • 일정 시간 동안만 페이지 로딩을 시도해본 후 완료하지 못한 경우 그대로 에러 레이즈.

  • 아래 코드는 다음페이지로이동하는 링크 텍스트 ('>')가 등장하면 클릭하는 단순한 코드인데 각 페이지 로딩시마다 단 10초만 대기하는 코드입니다. 이것을 이용해 특정 엘리먼트가 로딩되지 않아서 불필요하게 대기하는 시간을 줄일 수 있습니다.

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

from optparse import OptionParser
from selenium import webdriver  
import selenium.webdriver.chrome.service as Service
from selenium.webdriver.chrome.options import Options  
import time


options = Options()
driver = webdriver.Chrome(executable_path=ChromeDriverManager().install(), desired_capabilities=capabilities)
# driver.set_page_load_timeout(10)

url = f"https://torrentqq238.com/search?q=영화"
driver.get(url)
driver.set_page_load_timeout(10)
time.sleep(0.5)

while True:
    # Move to next page            
    try:
        driver.find_element(By.LINK_TEXT, ">").click()
    except Exception as e:
        print(e)
        break
profile
i have a dream and I will make my dreams come true.

0개의 댓글