1,多标签之间的切换
场景:有的时候点击一个连接,新页面并非由当前页面跳转过去,而是新开一个页面打开,这种情况下,计算机需要识别多标签或窗口的情况
(1)获取所有窗口的句柄
handles =driver.window_handlers()
调用该方法会得到一个列表,在selenium运行过程的每一个窗口都有一个对应的值存放在里面
(2)通过窗口的句柄进入的窗口
driver.switch_to_window(handles[n])
driver.switch_to.window(handles[n])
案例:58同城租房信息
2,多表单切换
在网页中,表单嵌套是很常见的情况,尤其是登录的场景
(1)什么是表单
实际上就是使用iframe/frame,引用了其他页面的连接,真正的页面数据并没有出现在当前源码中,但是在浏览器中我们看到,简单理解可以使页面中开了一个窗口显示另一个页面
(2)处理方法
直接使用ID值切换进表单
driver.switch_to.frame(value)/driver.switch_to_frame(value)
定位到表单元素,再切换进入
el=driver.find_element_by_xxx(value)
driver.switch_to.frame(el) /driver.switch_to_frame(el)
案例:QQ邮箱登录
3,弹框操作
(1)进入到弹框中
driver.switch_to.alert
(2) 接收警告
accept()
(3)解除警告
dismiss()
(4)发送文本到警告框
send_keys(data)
4.鼠标和键盘操作
5.Selenium 显式等待与隐式等待
在selenium中常用的等待分为显示等待、隐式等待、强制等待三种,
强制等待,设置固定休眠时间。 python 的 time 包提供了休眠方法 sleep() , 导入 time 包后就可以使用 sleep(),进行脚本的执行过程进行休眠。
隐式等待,也叫智能等待,是 webdirver 提供的一个超时等待。隐的等待一个元素被发现,或一个命令完成。如果超出了设置时间的则抛出异常。
显式等待,同样也是 webdirver 提供的方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,默认抛出异常为:NoSuchElementException