StoryCode

WebCrawl.py

Web Automation Test Tool
반응형

from 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 을 추가한 후에 액세스하는 것이 좋을 듯 하다.

반응형