一、多标签之间的切换

场景:有的时候点击一个链接,新页面并非由当前页面跳转过去,而是新开一个页面打开,这种情况下,计算机需要识别多标签或窗口的情况。

1.获取所有窗口的句柄

handles = driver. window_handles

调用该方法会得到一个列表,在selenium运行过程中的每一个窗口都有一个对应的值存放在里面。

2.通过窗口的句柄进入的窗口

driver.switch_to_window(handles[n])driver.switch_to.window(handles[n])     (推荐使用)

通过窗口句柄激活进入某一窗口

举例:58同城多标签切换

定位元素





代码展示

二、多表单切换

在网页中,表单嵌套是很常见的情况,尤其是在登录的场景

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空间进入账号密码登录

元素定位


代码展示

三、弹出框操作

1) 进入到弹出框中driver.switch_to.alert2) 接收警告accept()3) 解散警告dismiss()4) 发送文本到警告框send_keys(data)

举例:百度设置
获取元素


代码展示

四、鼠标和键盘操作

1.鼠标操作

导入动作链类,动作链可以储存鼠标的动作

from selenium.webdriver import ActionChains

获取元素

el = driver.find_element_by_xxx(value)

对el执行右击

context_click(el)

执行ActionChains中储存的所有动作
perform()
例如:

ActionChains(driver).context_click(ele).perform()   点击鼠标右键
ActionChains(driver). double_click(ele).perform()   点击鼠标左键
ActionChains(driver).move_to_element(el).perform()   鼠标悬停

代码展示:

2.键盘操作

键盘操作使用的是Keys类,一般配合send_keys使用

导入包

from selenium.webdriver.common.keys import Keys

常见的键盘操作

send_keys(Keys.BACK_SPACE)    删除键(BackSpace)send_keys(Keys.SPACE)      空格键(Space)send_keys(Keys.TAB)        制表键(Tab)send_keys(Keys.ESCAPE)       回退键(Esc)send_keys(Keys.ENTER)        回车键(Enter)send_keys(Keys.CONTROL,‘a’)     全选(Ctrl+A)send_keys(Keys.CONTROL,‘x’)     剪切(Ctrl+X)send_keys(Keys.CONTROL,‘v’)     粘贴(Ctrl+V)send_keys(Keys.F1)             键盘 F1
……
send_keys(Keys.F12)        键盘 F12

部分代码展示:

五、浏览器等待

1.为什么要进行等待?

1.网速慢2.网站内容过多3.如果不进行等待而直接定位元素,可能会抛出异常

2.selenium中等待的分类:

强制等待显示等待隐式等待

1.强制等待

# 导入定时等待库
from time import sleep 或者 import time#表示强行等待10s在执行下一句代码 这种等待方式时间到了就会执行下个语句,但比
较死板,不能保证在等待的时间内元素真正被加载了出来。而且如果等待的元素已经被
加载出来,还需要等待到时间才会执行下一句,浪费时间。
time.sleep(10)

2.隐式等待

driver.implicitly_wait(30) #等待30s这个等待表示在规定的时间内页面的所有元素都加载完了就执行下一步,否则一直等到
时间截止,然后再继续下一步。这个方法的缺点是你需要的元素已经加载出来了,但
页面还没有加载完,再需要继续等待页面加载完才能执行下一步操作。

注:隐式等待的作用域是全局,所以一般设置在整局代码的头几行。
隐式等待采用全部设置,也就是说,你所有的findElement方法都会最多等待30s

3.显式等待

需要导入的包
from selenium.webdriver.support.wait import WebDriverWait #导入显性等待的包
from selenium.webdriver.support import expected_conditions as EC #判断所需要的元素是否已经被加载出来
from selenium.webdriver.common.by import By #定位

WebDriverWait类是由WebDirver 提供的等待方法。显示等待明确的要等到某个元素的出现,在设置时间内每隔x秒去判断一下指定的元素是否加载完,加载完了就执行下一步,否则继续每隔x秒去判断,指定时间截止。如果超时就会抛出异常。

例如:

WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.CLASS_NAME,"g-hu")))

三者区别:

强制等待:傻瓜式等待,不智能
隐式等待:全局通用,只需设置一次,很智能(等到了就走,不会浪费时间)
显式等待:等待元素处于特定条件的时候使用,很智能(等到了就走,不会浪费时间)

Selenium 高阶操作相关推荐

  1. 深度学习(17)TensorFlow高阶操作六: 高阶OP

    深度学习(17)TensorFlow高阶操作六: 高阶OP 1. Where(tensor) 2. where(cond, A, B) 3. 1-D scatter_nd 4. 2-D scatter ...

  2. 深度学习(16)TensorFlow高阶操作五: 张量限幅

    深度学习(16)TensorFlow高阶操作五: 张量限幅 1. clip_by_value 2. relu 3. clip_by_norm 4. Gradient clipping 5. 梯度爆炸实 ...

  3. 深度学习(15)TensorFlow高阶操作四: 填充与复制

    深度学习(15)TensorFlow高阶操作四: 填充与复制 1. Pad 2. 常用于Image Padding 3. tile 4. tile VS broadcast_to Outline pa ...

  4. 深度学习(14)TensorFlow高阶操作三: 张量排序

    深度学习(14)TensorFlow高阶操作三: 张量排序 一. Sort, argsort 1. 一维Tensor 2. 多维Tensor 二. Top_k 三. Top-k accuracy(To ...

  5. 深度学习(12)TensorFlow高阶操作一: 合并与分割

    深度学习(12)TensorFlow高阶操作一: 合并与分割 1. concat 2. stack: create new dim 3. Dim mismatch 4. unstuck 5. spli ...

  6. Tensorflow学习四---高阶操作

    Tensorflow学习四-高阶操作 Merge and split 1.tf.concat 拼接 a = tf.ones([4,32,8]) b = tf.ones([2,32,8]) print( ...

  7. PS高阶操作之字体特效

    PS高阶操作之字体特效 字体冰封效果 字体金属样式 字体冰封效果 新建一个白色的像素画布. 新建好画布后,用油漆桶刷成深蓝色. 打开通道,新建一个通道,选择文字工具. 调整文字大小和位置.在菜单栏中选 ...

  8. STM32 TIM PWM高阶操作:刹车及状态约束

    STM32 TIM PWM高阶操作:刹车及状态约束 刹车及状态约束是STM32 TIM PWM控制里面比较复杂的一部分,涉及到PWM波形产生前,中,后的管脚状态输出. 这里先引入两个描述,一个是&qu ...

  9. PS高阶操作之木质纹理

    PS高阶操作之木质纹理 制作木纹纹理 制作木纹相框 制作木纹纹理 新建画布,大小随意. 用油漆桶工具填充棕色,并解锁背景图层,菜单栏选择滤镜-杂色-添加杂色 数量-60 分布-高斯分布. 滤镜-模糊- ...

最新文章

  1. 服务器断电重启修复,WIN取消100M隐藏分区、异常断电后绕过修复模式
  2. 英特尔“包抄”英伟达:oneAPI对标CUDA、为《王者荣耀》云游戏提供GPU
  3. Caffe代码导读(4):数据集准备
  4. S3 Texture Compression
  5. JVM解惑:消失的异常堆栈,log中打印异常堆栈为空
  6. Android官方开发文档Training系列课程中文版:OpenGL绘图之添加动态效果
  7. Debenham养老金项目关键流程1-员工分类流程
  8. JavaTPoint 数据科学和人工智能中文教程【翻译完成】
  9. js定时器异步请求时候 上一个请求没有响应时下一个请求已经开始_关于异步的理解...
  10. SAP License:SAP中现金管理实现
  11. 离子膜烧碱行业调研报告 - 市场现状分析与发展前景预测
  12. vue 面试题 前端面试题--vue 第六弹
  13. 八爪鱼导出到mysql数据库_数据导出到Oracle数据库的方法 - 八爪鱼采集器
  14. 一个迷茫的 大学生自学Linux的开始
  15. python:DataFrame对单列或多列进行整列的运算(map, apply, transform, agg)
  16. C语言进行可视化编程
  17. selenium之滑块操作
  18. eWebEditor的使用
  19. 令你极度舒适的Swift集合类高阶函数
  20. ARM指令解析之LSL

热门文章

  1. ACM入门之【组合数】
  2. Acwing第 20 场周赛【未完结】
  3. 【PAT乙级】1039 到底买不买 (20 分)
  4. 一个将字符串转换为整数的函数--atoi()
  5. Volatile可见性
  6. Zookeeper的目录结构
  7. 快速接入 GitHub、QQ 第三方登录方式
  8. Redis性能问题排查解决手册(值得收藏)
  9. touch: cannot touch /usr/local/tomcat/logs/catalina.out: Permission denied解决方法
  10. SpringMVC教程--图片上传