涉及到的库
类名 | 导入 | 说明 |
---|---|---|
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选择器定位 |