四 Selenium常用API(浏览器操作,鼠标事件,键盘事件,元素等待)
一 浏览器操作
<1>浏览器窗口大小设置
# 设置浏览器宽480、高800 driver.set_window_size(480,800) #最大化操作 driver.maximize_window() #最小化操作 driver.minimize_window()
<2>浏览器页面前进后退
#后退 driver.back() #前进 driver.forward()
<3> 页面刷新
driver.refresh()
<4> 浏览器关闭
# 关闭当前窗口 driver.close() #退出驱动并关闭所有关联的窗口 driver.quit()
二 鼠标事件
ActionChains类提供的鼠标事件常用方法(perform()执行所有ActionChains中存储的行为)
from selenium.webdriver.common.action_chainsimport ActionChains #双击事件 ActionChains(driver).double_click(element).perform() #右击事件 ActionChains(driver).context_click(element).perform() #鼠标悬停 ActionChains(driver).move_to_element(element).perform() #拖放操作drag_and_drop(source, target) #source:鼠标拖动的源元素. #target:鼠标释放的目标元素 ActionChains(driver).drag_and_drop(element,target).perform()
三 键盘事件
使用Keys类处理键盘操作
#删除键(Backspace) send_keys(Keys.BACK_SPACE) #空格键(Space) send_keys(Keys.SPACE) #Tab键 send_keys(Keys.TAB) #回退键(Esc) send_keys(Keys.ESCAPE) #回车键(Enter) send_keys(Keys.ENTER) #全选(Ctrl+A) send_keys(Keys.CONTROL,'a') #复制(Ctrl+C) send_keys(Keys.CONTROL,'c') #剪切(Ctrl+X) send_keys(Keys.CONTROL,'x') #粘贴(Ctrl+V) send_keys(Keys.CONTROL,'v') #键盘F1 send_keys(Keys.F1) #键盘F12 send_keys(Keys.F12)
四 元素等待
显示等待(WebDriverWait)
在设定时间内,针对某一个元素,默认每隔一段时间检测该元素是否存在,如果超过设定时间检测不到则抛出异常.
WebDriverWait主要有三个参数:
driver : WebDriver的驱动程序(IE,Firefox,Chrome等).
timeout : 最长超过时间,默认以秒为单位.
poll_frequency : 循环去查询的间隙时间,默认是0.5秒.
WebDriverWait一般与until()或Until_not()方法配合使用
元素出现 : until() ;元素消失: until_not():判断元素是否消失,是返回True,否返回False
until(self, method, # 在等待期间,每个一段时间调用这个传入的方法,直到该方法的返回值不为空 message='' # 如果超时,则抛出TimeoutException,将message传入给异常 ) until_not 与until相反,until是当某个元素满足某种条件时(出现、存在等等)继续执行;until_not则是当某个元素不满足某种条件时继续执行,参数含义相同
特别注意:
很多时候大家在使用until或until_not时,会将一个WebElement对象传入给method,如下:
WebDriverWait(driver, 10).until(driver.find_element_by_id('kw')) # 这是错误的用法
element1 = WebDriverWait(driver,5,0.5).until(lambda x : x.find_element_by_id('kw')) #正确用法
这里的参数一定要是可调用的,这个对象一定要有__call__()方法,否则会抛出异常:
TypeError: 'xxx' object is not callable
在这里,也可以用selenium提供的expected_conditions模块中提供的各种条件,也可用WebElement中的is_displayed(),is_selected(),is_enabled()方法或是自己封装的方法均可。下面我们再看看selenium提供了哪些条件,如图所示:

from selenium.webdriver.support import expected_conditions as EC #title_is:判断当前页面的title是否完全等于(==)预期字符串,返回布尔值 #与until配合使用 b = WebDriverWait(driver,10,0.5).until(EC.title_is('百度一下,你就知道')) #单独用,需要传入一个driver title = EC.title_is('百度一下,你就知道') print(title(driver)) #titlw_contains : 判断当前页面的title是否包含预期字符串,返回布尔值 b = WebDriverWait(driver,10,0.5).until(EC.title_contains('百度')) #presence_of_element_located : 判断某个元素是否加载到了dom树里,并不代表该元素一定可见(即判断元素是否存在)若存在则返回该元素. b = WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.CSS_SELECTOR,"input[name='ie']"))) #persence_of_all_elements_located :判断是否至少有1个元素存在于dom树中.(即判断一组元素是否存在,若存在将该一组元素全部返回). b = WebDriverWait(driver,5,0.5).until(EC.persence_of_all_element_located((By.XPATH,'//input'))) #visibility_of_element_located : 判断某个元素是否可见,可见代表元素非隐藏,并且元素的宽和高都不等于 0(即判断元素是否可见) b = WebDriverWait(driver,10,0.5).until(EC.visibility_of_element_located((By.CSS_SELECTOR,"input[name='ie']")),message='元素不可见') #visibility_of : 判断某个元素是否可见,与visibility_of_element_located的区别是该方法只需传入定位到的element就好了. b=WebDriverWait(driver,10,0.5).until(EC.visibility_of(driver.find_element_by_id('kw'))) #text_to_be_persent_in_element:判断某个元素中的text是否包含了预期的字符串.若包含则返回True r = WebDriverWait(driver,5,0.5).until(EC.text_to_be_persent_in_element((By.CSS_selector,"a[name='tj_trnews']"),"新闻")) #text_to_be_in_element_value :判断某个元素中的value属性是否包含预期的字符串. r = WebDriverWait(driver,5,0.5).until(EC.text_to_be_persent_in_element_value((BY.ID,'su'),'百度一下')) #frame_to_be_available_and_switch_to_it:判断frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False. #invisibility_of_element_located:判断某个元素中是否不存在于dom树或不可见.不可见则返回True. #element_to_be_clickable:判断某个元素是否可见并且是启动状态.(即判断元素是否可点击) #alert_is_persent:判断页面上是否存在alert.
隐式等待
隐式等待是通过一定的时长等待页面所有元素加载完成.如果超出了设置的时长,元素还没有被加载则抛NoSuchElementException异常.
#默认单元是秒 driver.implicitly_wait(10)
强制等待(sleep休眠)
sleep()方法默认参数以秒为单位,如果设置时长小于1秒,可以用小数点表示
浙公网安备 33010602011771号