Selenium特殊情况处理:
//例子网站: http://www.runoob.com/try/try.php?filename=tryjs_alert
1)iframe内联框架
① switch_to.frame(可以是iframe的id也可以用使用八大定位)
② switch_to_frame(已经不使用了)
def alert(self): driver = webdriver.Chrome() driver.get('http://www.runoob.com/try/try.php?filename=tryjs_alert') driver.switch_to.frame('iframeResult') driver.find_element_by_css_selector('body > input[type="button"]').click() time.sleep(5) driver.close()
2)使用iframe后进入的iframe标签里面,对iframe标签外进行操作的时候需要跳出iframe
def alert(self): driver = webdriver.Chrome() driver.get('http://www.runoob.com/try/try.php?filename=tryjs_alert') driver.switch_to.frame('iframeResult') # driver.find_element_by_css_selector('body > input[type="button"]').click() driver.switch_to.default_content() # driver.find_element_by_css_selector('body > nav > div > div > h1').click() driver.find_element_by_xpath('/html/body/nav/div/div/h1').click() time.sleep(5) driver.close()
3)多重嵌套iframe,需要多次跳转,default_content()是直接返回主文档,而parent_frame()是返回上一级
4)switch_to.alert
① accept----点击确认按钮
② dismiss----点击取消按钮
③ send_keys------输入内容
def alert(self): driver = webdriver.Chrome() driver.get('http://www.runoob.com/try/try.php?filename=tryjs_alert') driver.switch_to.frame('iframeResult') driver.find_element_by_css_selector('body > input[type="button"]').click() driver.switch_to.alert.accept() time.sleep(5) driver.close()
5)自定义弹窗:
例子网站: http://www.xiucai.com/
① document.getElementsByClassName('new-register')[0].style.display='none'
def xiucai(self):
driver=webdriver.Chrome()
driver.get('http://www.xiucai.com/')
time.sleep(20)
js="document.getElementsByClassName('new-register')[0].style.display='none'"
js2="document.getElementsByClassName('overlay1')[0].style.display='none'"
driver.execute_script(js)
driver.execute_script(js2)
time.sleep(5)
driver.close()
Selenium窗口切换(多窗口):
1)获取句柄:
①:获取所有句柄: driver.window_handles
②:获取当前句柄: driver.current_window_handle
def win(self): driver = webdriver.Chrome() driver.get('http://home.baidu.com/') #获取当前句柄 handle_baidu=driver.current_window_handle print(handle_baidu) driver.find_element_by_css_selector('#indexAdmin > div.main > div.main-body > div.full-section.news-section > div > div > div > div:nth-child(1) > a > div > div > div > img').click()
③跳转窗口: driver.switch_to.window()
Selenium强制等待:
强制等待:
def time_sleep(self): time.sleep(5)
隐式等待(最长等待30秒):
def time_sleep(self): driver=webdriver.Chrome() driver.implicitly_wait(30)
显示等待(配合until来使用,超时之后会报异常): from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support.wait import WebDriverWait #判断 from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By def time_sleep(self): driver=webdriver.Chrome() driver.get('https://github.com') locator=By.ID,'user[login]' WebDriverWait(driver,30,0.5).until(EC.presence_of_all_elements_located(locator)) driver.find_element_by_id("user[login]").send_keys("123456")
Selenium日期控件:
普通input输入框:
只读日历控件(去掉只读属性):
driver=webdriver.Chrome() driver.get('http://kyfw.12306.cn/otn/index/init') js='document.getElementById("train_date").removeAttribute("readonly")' driver.execute_script(js) driver.find_element_by_id('train_date').send_keys(2018-06-11)
Selenium文件图片的上传方式:
driver=webdriver.Chrome() driver.get('网址路径') driver.find_element_by_name('file').send_keys('上传文件路径')
文章链接地址:http://mumuling.com/?p=85