WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until(可执行方法, 超时时返回的信息)
这里需要特别注意的是until或until_not中的可执行方法method参数,很多人传入了WebElement对象,如下:
1 |
|
这是错误的用法,这里的参数一定要是可以调用的,即这个对象一定有 __call__() 方法,否则会抛出异常:
1 |
|
在这里,你可以用selenium提供的 expected_conditions 模块中的各种条件,也可以用WebElement的 is_displayed() 、is_enabled()、is_selected() 方法,或者用自己封装的方法都可以,那么接下来我们看一下selenium提供的条件有哪些:
expected_conditions
expected_conditions是selenium的一个模块,其中包含一系列可用于判断的条件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
上面是所有17个condition,与until、until_not组合能够实现很多判断,如果能自己灵活封装,将会大大提高脚本的稳定性。
2、selenium鼠标悬停类-- ActionChains()
导包:from selenium.webdriver.common.action_chainsimport ActionChains
elem1= dr.find_element(By.LINK_TEXT,"设置")
ActionChains(dr).move_to_element(elem1).perform()
3、selenium警告框的处理
很多web应用经常会遇到JavaScript编写的alert 、confirm 以及prompt 弹窗,需要用到switch_to.alert来切换弹窗,并对弹窗进行输入信息,关闭等处理。
switch_to.alert.text --获取弹窗文本信息
switch_to.alert.accept() --点击弹窗中确定按钮
switch_to.alert.dismiss() --点击弹出中取消按钮
switch_to.alert.sendKeys("字符串") --在弹窗中输入信息
4、下拉菜单选择的三种方式
导包:from selenium.webdriver.support.uiimport Select
#选择下拉框的o2
elem1 = dr.find_element(By.ID,"s3Id")
(1):根据value值定位
Select(elem1).select_by_value("o2val")
(2).根据index定位
Select(elem1).select_by_index(1)
(3).根据下拉框文本信息定位
Select(elem1).select_by_visible_text("o2")
5、selenium之JS操作浏览器滚动条位置
driver.maximize_window()
execute_script("window.scrollTo(0,n);") #n即坐标位置
6、selenium之JS操作隐藏元素
隐藏元素的标识:style="display:none;"
一般我们通过将隐藏元素的属性修改成显示再定位
#修改隐藏元素属性为显示
elem = 'document.getElementById("id").style.display="block";'
driver.execute_script(elem)