selenium 浏览器的相关操作及等待操作(二)

涉及到的库

类名 导入 说明
WebDriverWait from selenium.webdriver.support.ui import WebDriverWait 显式等待
expected_conditions from selenium.webdriver.support import expected_conditions 与显示等待连用
Options from selenium.webdriver.chrome.options import Options 浏览器设置
Keys from selenium.webdriver.common.keys import Keys 按键库
By from selenium.webdriver.common.by import By 元素零件库

浏览器操作

浏览器属性

调用说明 属性说明
driver.current_url 用于获得当前页面的URL
driver.title 用于获取当前页面的标题
driver.page_source 用于获取页面html源代码
driver.current_window_handle 用于获取当前窗口句柄
driver.window_handles 用于获取所有窗口句柄

浏览器函数

调用说明 描述
driver.get 访问网页
driver.forward 在存在历史记录下,向前拜访网页
driver.back 在存在历史记录下,向后拜访网页
driver.refresh 浏览器刷新
driver.close 关闭当前窗口
driver.quit 关闭所有窗口并安全关闭session
driver.maximize_window 窗口最大化
driver.set_window_size 设置窗口大小
driver.get_window_size 获取当前窗口大小
dirver.get_window_position 获取当前窗口的坐标
driver.get_sreenshot_as_file 截图当前窗口
driver.execute_script 运行js
driver.get_cookies 获取当前会话所有cookie信息
driver.get_cookie 获取会话的cookie信息
driver.add_cookie 添加cookie
driver.delete_cookie 删除cookie
driver.delete_all_cookies 删除所有cookie
driver.switch_to 切换窗口window、框架frame,最外层default_content,警告框处理alert,跳出当前一级表单parent_content

等待操作

分为三种方式:
强制(time.sleep):不管操没操作完都停指定的事件才继续
隐式(browser.implicitly_wait(time_to_wait)):一旦设置,存在与整个实例周期中,只要定位元素,都进行一次。在指定时间内按特定频率寻找元素,找到了则结束继续下一语句,没找到则时间结束后返回NoSuchElementException异常
显式等待(WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)):按指定的方式执行until/until_not内的method
	driver:浏览器驱动
	timeout:最大超时时间
	poll_frequency:询问的间隔步长,默认0.5s
	ignored_exceptions:超时后的抛出异常信息,默认抛出NoSuchElementException异常
	与until和until_not连用,如:mothed可以是lambda函数或expected_conditions下的函数
	WebDriverWait(driver,10).until(method,message="")
	调用method提供的驱动程序作为参数,message传入method的参数,直到返回值为True
	WebDriverWait(driver,10).until_not(method,message="")
	调用method提供的驱动程序作为参数,message传入method的参数,直到返回值为False

WebDriverWait–显式等待

相关库

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support import By

示例

waite=webDriverWait(driver,10,0.5)
element=waite.until(EC.presence_of_element_located(By.ID,"kw"))
#判断id=kw的元素是否在dom树里
expected_conditions方法 说明
title_is 判断当前页面的title是否完全等于预期字符串,返回bool
title_contains 判断当前页面的title是否包含预期字符串,返回bool
presence_of_element_located 判断某个元素是否被加到dom树里,并不代表该元素一定可见
presence_all_element_located 判断是否至少有一个元素存在于dom树里,举例:如果页面上有n个元素的class都是‘wp’,那么只要有一个元素存在,这个方法就返回True
visibility_of_element_located 判断元素是否可见(可见代表元素非隐藏,并且元素宽和高都不等于0)
visibility_of 同上,只是参数由locator变为定位后的元素
text_to_be_present_in_element 判断某个元素的text是否包含预期的字符串
text_to_be_present_in_element_value 判断某个元素中的value属性是否包含预期的字符串
frame_to_be_available_and_switch_to_it 判断frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False
invisibility_of_element_located 判断某个元素是否不存在于dom树或不可见
element_to_be_clickable 判断某个元素是否可见并且可点击
element_to_be_selected 判断某个元素是否被选中,一般用在下拉列表
element_selection_state_to_be 判断某个元素的选中状态是否符合预期,这个方法传入element
element_located_selection_state_to_be 同上,这个方法传入locator
staleness_of 等某个元素从dom树中移除,返回bool值
alert_is_present 判断页面上是否存在alert

也可使用lambda 自编辑函数,如

waite=webDriverWait(driver,10,0.5)
element=waite.until(lambda the:the.find_element_by_id('kw').is_displayed())#=presence_of_element_located(By.ID,'kw')
By方法 说明
By.ID id属性定位
By.NAME name属性定位
By.CLASS_NAME classname属性定位
By.LINK_TEXT a标签文本属性定位
By.PARTIAL_LINK_TEXT a标签部分文本属性定位
By.TAG_NAME 标签名定位
By.XPATH xpath路径定位
By.CSS_SELECTOR css选择器定位
上一篇:selenium显式等待的封装


下一篇:WPF使用Animation仿WeChat(微信)播放语音消息