"""
元素三大等待
1、强制等待
2、显性等待
3、隐性等待
显性等待、隐性等待又称为智能等待
"""
import time
from selenium import webdriver
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
#初始化chrome对象
driver=webdriver.Chrome()
#打开百度
driver.get("https://www.baidu.com")
# #最大化窗口
# driver.maximize_window()
#定位输入框
input_ele=driver.find_element_by_id("kw")
#在输入框输入要搜索的信息,比如淘宝
input_ele.send_keys("淘宝")
#定位搜索按钮
search_ele=driver.find_element_by_xpath("//*[@id='su']")
#点击搜索
search_ele.click()
"""强制等待"""
# #设置强制等待时间
# time.sleep(2)
"""隐性等待,若超过设置的超时时间还未找到该元素就会报“NoSuchElementException”,如果在超时时间内找到元素则可以直接操作元素"""
#设置隐性等待,里面的20是超时时间
# driver.implicitly_wait(20)
#定位淘宝官网
# ele1=driver.find_element_by_xpath("//*[@class='t']/a[1]")
# ele1.click()
"""显性等待
1、先导入from selenium.webdriver.support.wait import WebDriverWait
2、设置定时器(超时时间、轮循时间)
3、设置结束定时器需满足的条件
"""
#设置显性等待
#设置定时器,超时时间5s,轮循时间0.5s
wait=WebDriverWait(driver,5,poll_frequency=0.5)
#设置满足的条件,locator是个元组
loca=('xpath',"//*[@class='t']/a[1]")
#通过元素是否可以点击来判断
# ele=wait.until(expected_conditions.element_to_be_clickable(locator=loca))
#通过元素是否可见来判断
# ele=wait.until(expected_conditions.visibility_of_element_located(locator=loca))
#通过元素是否出现来判断
ele=wait.until(expected_conditions.presence_of_element_located(locator=loca))
print(ele.text)
ele.click()
总结:
1、智能等待(给你一个超时时间,如果在超时时间之内能够找到,就直接返回元素;如果超时,报错)包括隐性等待与显性等待
---隐性等待
- 全局设置
- 设置超时时间,超过超时时间报异常:NoSuchElementException
- 只能用来等待元素
---显性等待
- 等待某个可以被点击
- 等待某个元素可见
- 等待某个窗口被打开
- 显性等待不是全局的,每次等待都要单独设置
- 显性等待几个重要的条件
- presence_of_element_located(locator) 元素是否出现
- visibility_of_element_located(locator) 元素是否可见
- element_to_be_clickable(locator) 元素是否可以被点击
- 显性等待如果找不到元素,报错:TimeoutException
2、 等待方式的选择
若需要全局设置,或者等待查找元素,则选择隐形等待;
若需要等待元素可以被点击或者可见,则选择显性等待;
若是多个系统交互,则选择强制等待。