一。等待
1.强制等待
使用方法:time.sleep()
特点:非智能等待,等待时间不好控制,多用在不同系统之间的等待时间的设置
2.隐性等待
智能等待(设置一个时间,在超时之前能够找到直接返回元素,如果超时就报错:NoSuchElementException)
特点:1.全局设置;
2.设置超时时间,超过时间报错:NoSuchElementException
3.只能等待元素
使用:
from selenium import webdriver
import time
driver=webdriver.Chrome()
#设置隐性等待时间为5秒
driver.implicitly_wait(5)
3.显性等待
特点:1.可以等待某个可以被点击
2.可以等待某个元素可见
3.等待某个窗口被打开
4.显性等待不是全局的,每次等待都要单独设置
使用(比较常用):
- presence_of_element_located(locator) 元素是否出现
- visibility_of_element_located(locator) 元素是否可见
- element_to_be_clickable(locator) 元素是否可以被点击
例子:
#显性等待
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
#第一设置定时器,没0.5秒获取一次,一直持续三秒中
wait=WebDriverWait(driver,3,poll_frequency=0.5)
#第二:设置满足的条件
#设置locator条件,以xpath方式,后面式表达式
locator=('xpath','//*[text()="ke.qq.com/"]')
#等待该元素为可点击状态
element_tengxun=wait.until(expected_conditions.element_to_be_clickable(locator=locator))
driver.get("http://www.baidu.com")
二。切换
1.窗口切换
#窗口切换
#driver.window_handles - -获取所有句柄;driver.switch_to.window选择窗口
driver.switch_to.window(driver.window_handles[-1])
#获取当前窗口的url信息
print(driver.current_url)
运行结果:
2.iframe切换
1)先定位iframe所在的位置
2)使用switch_to.frame(位置)方法进入到定位iframe页面
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
driver=webdriver.Chrome()
#iframe 切换
driver.get("http://localhost:63342/python29/class_34_%E4%B8%89%E5%A4%A7%E7%AD%89%E5%BE%85%E5%92%8C%E5%88%87%E6%8D%A2/%E5%88%87%E6%8D%A2.html?_ijt=f7cfcmfgigvmnrorpmrdtagiub")
#页面iframe的坐标地址
element_ifrnamebaidu=driver.find_element_by_xpath('//iframe[@src]')
#进入到iframe标签当中的 链接中
driver.switch_to.frame(element_ifrnamebaidu)
#定位到iframe链接中百度的输入框
element_baiduinput=driver.find_element_by_xpath('//input[@id="kw"]')
print(element_baiduinput)
#切回主页面
driver.switch_to.default_content()
#定位主页面的信息“hello”
t=driver.find_element_by_xpath('//p[text()="hello"]')
print(t)
运行结果:
html 源文件内容:
注意:
1)多个iframe(iframe中还有iframe,多层嵌套)
需要一个一个iframe定位并切入,退出也是。
3.Alert切换
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
driver.get("http://localhost:63342/python29/class_34_%E4%B8%89%E5%A4%A7%E7%AD%89%E5%BE%85%E5%92%8C%E5%88%87%E6%8D%A2/alert%E5%BC%B9%E7%AA%97.html?_ijt=t76899q7dku673gtinaepdv06b")
#定位按‘hello’并点击
click_butent=driver.find_element_by_xpath('//p[@id]')
click_butent.click()
#等待alert出现
#expected_conditions.alert_is_present()
WebDriverWait(driver,20,poll_frequency=0.5).until(expected_conditions.alert_is_present())
#切换到alert页面
alert_ele=driver.switch_to.alert
time.sleep(2)
#点击确定
alert_ele.accept()
#点击取消
#alert_ele.dismiss()
运行结果:
html源文件内容: