WebCrawl.py
Web Automation Test Toolfrom selenium import webdriver
from selenium.webdriver.common.by import By
# WebDriverWait는 Selenium 2.4.0 이후 부터 사용 가능합니다.
from selenium.webdriver.support.ui import WebDriverWait
# expected_conditions는 Selenium 2.26.0 이후 부터 사용 가능합니다.
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
driver = webdriver.Chrome('chromedriver.exe')
# 브라우저가 무조건 3초 기다림.
driver.implicitly_wait(5)
driver.get('http://www.t.net')
# 특정 개체가 나올때까지 10초간 대기 ( 로그인전 )
try:
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="loginli"]/a')))
finally:
driver.find_element_by_xpath('//*[@id="loginli"]/a').click()
driver.find_element_by_xpath('//*[@id="loginli"]/a').click()
driver.find_element_by_name('memberid').send_keys('아이디')
driver.find_element_by_name('memberpwd').send_keys('비밀번호')
driver.find_element_by_xpath('//*[@id="btn_login"]').click()
# 특정 개체가 나올때까지 10초간 대기 ( 로그인후 )
try:
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="login_div2"]/li[3]/a')))
finally:
print("")
driver.get("http://www.t.net/math/main.jsp")
try:
# 중요 : frame 안의 frame 은 최상위부터 차례대로 하나씩 내려가야 한다.
driver.switch_to_default_content()
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, 'main')))
driver.switch_to_frame(driver.find_element_by_name("main"))
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, 'middleFrame')))
driver.switch_to_frame(driver.find_element_by_name("middleFrame"))
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, 'leftFrame')))
driver.switch_to_frame(driver.find_element_by_name("leftFrame"))
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="t_left_menu"]/div[1]/p/span')))
finally:
# 하나만 찾기
membername = driver.find_element_by_xpath('//*[@id="t_left_menu"]/div[1]/p/span')
print(membername.text)
# 여러개 찾기
try:
driver.switch_to_default_content()
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, 'main')))
driver.switch_to_frame(driver.find_element_by_name("main"))
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, 'middleFrame')))
driver.switch_to_frame(driver.find_element_by_name("middleFrame"))
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, 'mainFrame')))
driver.switch_to_frame(driver.find_element_by_name("mainFrame"))
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="datatable"]/table')))
finally:
tasklist = driver.find_elements_by_css_selector('#datatable > table > tbody > tr > td > div > div')
for t in tasklist:
print(t.text)
# 동작중에 다른 웹 화면이 가려지거나 하면 오동작도 하는 것 같다.
# 가끔동작하지 않는 경우가 있는데, 왠만한 곳에는 WebDriverWait 을 추가한 후에 액세스하는 것이 좋을 듯 하다.
'Web Automation Test Tool' 카테고리의 다른 글
Selenium 을 이용한 Web 어플리케이션 테스트 자동화 (0) | 2018.05.31 |
---|---|
Web Automation Test Tool Guide (0) | 2018.05.31 |