반응형

셀레니움, 파이썬, XPATH 요소 존재를 바로 알려주는 함수 만들기

 

글. 수알치 오상문 

 

# XPATH가 지금 존재하는지 확인하고 True/False를 돌려준다.

def isExistXpath(xpath, implicitly_wait_time=0, old_wait=25):
    global driver
    driver.implicitly_wait(implicitly_wait_time)
    try:
        driver.find_element(By.XPATH, xpath)
    except Exception:
        return False
    finally:
            driver.implicitly_wait(old_wait)
    return True

 

 

[예제]

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

 

implicitly_wait_time = 25



# XPATH가 지금 존재하는지 확인하고 True/False를 돌려준다.
def isExistXpath(xpath, implicitly_wait_time=0, old_wait=25):
    global driver
    driver.implicitly_wait(implicitly_wait_time)
    try:
        driver.find_element(By.XPATH, xpath)
    except Exception:
        return False
    finally:
            driver.implicitly_wait(old_wait)
    return True
 
print('드라이버 로딩...')
options = Options()  # options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-logging"])  # 시스템 usb 오류 금지
options.add_argument("lang=ko_KR")
options.add_argument("user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36")
options.add_experimental_option(
    "prefs",
    { "download.default_directory": 'D:\\download',  # 다운로드 파일을 저장할 경로
      "download.prompt_for_download": False,
      "download.directory_upgrade": True,
      "safebrowsing.enabled": True
    })
# options.add_argument("disable-gpu")
# options.add_argument('--blink-settings=imagesEnabled=false')  # 이미지 로딩 금지
# options.add_argument('--mute-audio')  # 음소거
# options.add_argument('incognito')  # 시크릿 모드 실행
# options.add_argument('headless')
# driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
driver = webdriver.Chrome(options=options)

 

# driver.maximize_window()
driver.implicitly_wait(implicitly_wait_time)  # 크롬 브라우저 내부 대기 (암묵적 대기)
 
# 테스트 -----------------------------------------
try:
    driver.get('https://www.daum.net/')
    el = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH,
        '//*[@id="daumHead"]/div[2]/div/div[1]/ul/li[4]/a/span')))  # 존재하는 XPATH
    print('검사 시작')
    print(str(isExistXpath('//*[@id="daumHead"]/div[2]/div/div[1]/ul/li[4]/a/span')))  # True
    print(str(isExistXpath('//*[@id="Error"]/div[2]/div/div[1]/ul/li[4]/a/span')))  # False: 존재 안하는 XPATH
    print(str(isExistXpath('//*[@id="Error"]/div[2]/div/div[1]/ul/li[4]/a/span')))  # False: 존재 안하는 XPATH
    print(str(isExistXpath('//*[@id="Error"]/div[2]/div/div[1]/ul/li[4]/a/span')))  # False: 존재 안하는 XPATH
    print('검사 종료')
except Exception as e:
    print('Error:', e)
finally:
    driver.close()
    driver.quit()
 

 

반응형

+ Recent posts