반응형

셀레니움, WebDriverWait 및 에러 처리, 드라이버 옵션 예제

 

글. 수알치 오상문

 

네이버 또는 다음에 접속하고 WebDriverWait를 이용하여 footer id가 확인될 때까지 기다립니다.

 

# 불필요한 모듈도 있지만 자주 쓰는 것이라 포함 시킴

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
from webdriver_manager.chrome import ChromeDriverManager
import time

# ---------------------------------------------------
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging']) # device error 메시지 off
#options = options.add_argument('--headless')
#PATH = '/myproject/webdriver/chromedriver.exe'
#driver = webdriver.Chrome(PATH, options=options)
driver = webdriver.Chrome(options=options)  # 현재 위치에 있는 크롬드라이버 등록
driver.implicitly_wait(20)  # 정상 페이지 로딩 최대 허용 시간
driver.set_window_size(1920, 1600)  # 브라우저 창 크기
driver.set_window_position(1, 1)  # 브라우저 화면 위치 
driver.set_page_load_timeout(20)  # 페이지 로딩 타임아웃 시간 20초
# ----------------------------------------------------
urls = {'naver': 'https://naver.com',
        'daum': 'https://daum.net', }
footerID = {'naver': 'footer',
            'daum': 'daumFoot',}
target = 'daum'
start = time.time()

try:
    driver.get(urls[target])
    try:
        WebDriverWait(driver, 20).until(
            lambda driver: driver.find_element(By.ID, footerID[target]))
        print('OK!, found:', target.upper(), 'footer')        
    except Exception as e:
        print('get error:', e)
        raise Exception('"%s"(id) not found' %footerID[target])
except Exception as e:
    print('get error:', e)
    driver.quit()
    exit(1)

if target not in driver.current_url:
    print(target.upper(), 'page not found!')
else:  
    print('driver.current_url:', driver.current_url)
    print('driver.title:', driver.title)
   
print('Lap time: %.2f초' %(time.time() - start))     
input('Quit? ')
driver.quit()

 

[실행 결과] 네이버(NAVER)

OK!, found: NAVER footer
driver.current_url: https://www.naver.com/
driver.title: NAVER
Lap time: 4.77초
Quit? 

[실행 결과] 다음(DAUM)
OK!, found: DAUM footer
driver.current_url: https://www.daum.net/
driver.title: Daum
Lap time: 5.34초
Quit? 

 

반응형

+ Recent posts