selenium常用操作学习笔记
一,弹窗处理(推荐文章:https://blog.csdn.net/huilan_same/article/details/52298460)
selenium提供switch_to方法定位弹窗的对话框:alert,prompt,confirm
方法一:
a = driver.switch_to.alert # 定位弹窗的对话框
driver.switch_to.alert.accept() # 点击确认
driver.switch_to.alert.dismiss() # 点击取消
driver.switch_to.alert.send_keys('输入内容') # 输入内容
driver.switch_to.alert.text() # 获取对话框文本值
方法二:
使用显式等待,判断alert是否出现(EC.alert_is_present())
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(driver, 5)
wait.until(EC.alert_is_present()).accept()
wait.until(EC.alert_is_present()).dismiss()
wait.until(EC.alert_is_present()).send_keys("XXX")
wait.until(EC.alert_is_present()).text()
二,windows弹窗处理
1.定位iframe弹窗
# 切换到iframe中,然后再定位
# 方法一,根据iframe标签的id属性值定位,id唯一
driver.switch_to.frame('frame_id')
# 方法二,根据iframe标签的name属性值定位,name唯一
driver.switch_to.frame('frame_name')
# 方法三,通过索引定位
# index从0开始,传入整型参数即判定为用index定位,传入str参数则判定为用id/name定位
driver.switch_to.frame(1)
# 方法四,根据webelement对象进行定位
driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0])
2.frame间的切换
<html>
<iframe id="frame1">
<iframe id="frame2" / >
</iframe>
</html>
# 从iframe回到父html,从ifrme1或iframe2回到父html
driver.switch_to.default_content()
# 能够切换到父iframe元素中,从iframe2回到iframe1
driver.switch_to.parent_frame()
三,窗口间切换
# 获取所有窗口
all_windows = driver.window_handles # 获取当前窗口handle name
current_window = driver.current_window_handle # 方法一
# 切换window,如果window不是当前window,则切换到该window
for window in all_windows:
if window != current_window:
driver.switch_to.window(window) # 方法二
# 切换到最新的窗口
driver.switch_to.window(driver.window_handles[-1]) # 关闭新窗口后切回原窗口,在这里不切回原窗口,是无法操作原窗口元素的,即使你关闭了新窗口
driver.close()
driver.switch_to.window(current_window)
四,鼠标操作(参考文档:https://blog.csdn.net/jamieblue1/article/details/89856576 和 module-selenium.webdriver.common.action_chains)
ActionChains支持模拟一系列的鼠标操作,例如鼠标移动、鼠标按钮操作、按键操作、上下文交互操作、单击、双击、右键、拖拽等。
1,ActionChains包括的方法
| ActionChains类中的操作方法 | 解析 |
| click(on_element=None) | 点击鼠标左键 |
| click_and_hold(on_element=None) | 点击鼠标左键不松开 |
| context_click(on_element=None) | 点击鼠标右键 |
| double_click(on_element=None) | 双击鼠标左键 |
| drag_and_drop(source, target) | 拖拽指定元素source,到指定target,并松开 |
| drag_and_drop_by_offset(source, xoffset, yoffset) | 拖拽指定元素source到指定的x,y坐标,并松开 |
| key_down(value, element=None) | 按下某个键盘上的键 |
| key_up(value, element=None) | 松开某个键 |
| move_by_offset(xoffset, yoffset) | 鼠标从当前位置移动到某个坐标 |
| move_to_element(to_element) | 鼠标移动到指定元素的中间 |
| move_to_element_with_offset(to_element, xoffset, yoffset) | 鼠标移动到距离指定元素x,y坐标的位置 |
| pause(seconds) | 在指定时间内暂停所有的输入 |
| perform() | 执行链中的所有动作 |
| release(on_element=None) | 在某个元素位置松开鼠标左键 |
| reset_actions() | 清除本地和远程端上已经存储的操作 |
| send_keys(*keys_to_send) | 发送某些键到当前焦点的元素 |
| send_keys_to_element(element, *keys_to_send) | 发送某些键到指定元素 |
比如,点击百度页面右上角的【设置->高级设置】
注意:a.c.c的操作只是模拟鼠标移动到元素上,此后便可定位元素并做点击操作
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains # 创建浏览器对象
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
# 定位设置元素
element = driver.find_element_by_xpath("//div[@id='u1']//a[@name='tj_settingicon']") # 鼠标移动到设置上,其下面的子元素都可以显示出来;鼠标移开的时候,子元素则消失。
# 浏览器无法操作这些元素,可以借助ActionChain对象 # a.创建ActionChain对象,控制鼠标
action_chains = ActionChains(driver)
# b.设置动作,此时鼠标还未操作
action_chains.move_to_element(element)
# c.执行动作
action_chains.perform()
# 定位高级搜索,并点击
driver.find_element_by_link_text('高级搜索')
# 关闭浏览器
driver.close()
查看ActionChains模块源码可以发现,ActionChains中的操作方法,会将操作放到self._actions(类型为list)队列中,并返回self实例本身,然后通过perform方法,依次执行队列中的操作。
When you call methods for actions on the ActionChains object,
the actions are stored in a queue in the ActionChains object.
When you call perform(), the events are fired in the order they
are queued up.
# 支持链式操作
ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
五,滚动条处操作
使用driver.execute_script(script, *args)方法
# 滚动到最底部
window.scrollTo(0, document.body.scrollHeight)
# 滚动到最顶部
window.scrollTo(document.body.scrollHeight, 0) ele = driver.find_element_by_xpath('')
# 将定位的元素滚动到最顶部
driver.execute_script('arguments[0].scrollIntoView()', ele)
# 将定位的元素滚动到最底部
driver.execute_script('arguments[0].scrollIntoView(false)', ele)
# 将定位的元素滚动到最中间
driver.execute_script('arguments[0].scrollIntoView({behavior: "smooth",
block: "center", inline: "center"})', ele)
六,select标签的下拉框的选择
1.选择
from selenium.webdriver.support.select import Select
# 创建Select对象,将定位的select元素(WebElement对象)作为参数传过来
select = Select(driver.find_element_by_name("gpc")) # 通过index进行选择,索引从0开始
select.select_by_index(1) # 通过value进行选择
select.select_by_value("a") # 通过选项文字进行选择
select.select_by_visible_text("最近一月")
# 获取所有已选择的元素组成的列表
select.all_selected_options
select.options
2.取消选择,Select提供了四个方法给我们取消原来的选择:
# 去除所有的选择
select.deselect_all() select.deselect_by_index(index) select.deselect_by_value(value) deselect_by_visible_text(text)
3.关于选项的操作
# 获取select元素所有的options
select.options
# 打印select元素中所有的options
for s in select.options:
print(s.text)
# 获取所有被选中的options
select.all_selected_options
# 获取第一个被选中的option
select.first_selected_opt
七,其他操作
# 浏览器前进
driver.forward()
# 浏览器后退
driver.back()
# 浏览器刷新
driver.refresh()
# 窗口最大化
driver.maximize_window()
# 获取标题
driver.title
# 如果类属型是动态的,可以通过get_attribute获取当前元素的类或者name属性值
attr = driver.find_element_by_xpath("//div[@class='inner']").get_attribute('class')
selenium常用操作学习笔记的更多相关文章
- Numpy np.array 相关常用操作学习笔记
1.np.array构造函数 用法:np.array([1,2,3,4,5]) 1.1 numpy array 和 python list 有什么区别? 标准Python的列表(list)中,元素本质 ...
- mongodb常用命令学习笔记
mongodb常用命令学习笔记 创建数据库 use DATABASE_NAME eg: use users; 如果数据库不存在,则创建数据库,否则切换到指定数据库.要显示刚刚创建的数据库,需要向数据库 ...
- 7 种 Javascript 常用设计模式学习笔记
7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的 ...
- MySQL4.0命令操作学习笔记
声明:下列内容并非原创,仅仅是最近学习笔记整理. -------------------------------------- 进入mysql安装路径bin目录下: 1.开启服务 winmysqlad ...
- selenium常用操作,查找元素,操作Cookie,获取截图,获取窗口信息,切换,执行js代码
目录: 1. 常用操作 2. 查找元素 3. 操作Cookie 4. 获取截图 5. 获取窗口信息 6. 切换 7. 执行JS代码 简介 selenium.webdriver.remote.webdr ...
- 侠说java8--Stream流操作学习笔记,都在这里了
前言 首次接触到Stream的时候以为它是和InputStream.OutputStream这样的输入输出流的统称. 流和集合的前世今生 概念的差异 在开发中,我们使用最多的类库之一就是集合.集合是一 ...
- Python字符串的常用操作学习
>>> name = "I love my job!" >>> name.capitalize() #首字母大写 'I love my job! ...
- FFmpeg常用命令学习笔记(一)基本信息查询命令
笔者才开始学习音视频开发,FFmpeg学习笔记系列主要是从慕课网李超老师的FFmpeg音视频核心技术精讲与实战课程学习的心得体会. FFmpeg音视频核心技术精讲与实战:https://coding. ...
- 吴裕雄--天生自然java开发常用类库学习笔记:大数操作
import java.math.* ; class MyMath{ public static double add(double d1,double d2){ // 进行加法计算 BigDecim ...
随机推荐
- time模块:时间戳和格式化好的时间表示方法及互相转换方法
1.导入time模块 import time 2.获取当前时间的时间戳 time.time() 3.获取当前格式化好的时间 time.strftime(想要获取的格式) 4.时间戳和格式化 ...
- CentOS6.10下安装MongoDB和Redis
安装mongodb 首先考虑离线安装,但是安装过程中在启动服务的时候出现了问题,centOS出于稳定原因考虑,系统自带的glibc版本过低, 而编译需要使用较高版本,这个问题我查询了一下,需要升级gl ...
- Gradle系列之Android Gradle插件
原文发于微信公众号 jzman-blog,欢迎关注交流. 通过前面几篇文章学习了 Gradle 基础知识以及 Gradle 插件相关的知识,关于 Gradle 及其插件相关知识请先阅读下面几篇文章: ...
- yum管理——搭建iso镜像私有yum源仓库(1)
在服务器上一般是没有光驱的,那么我们怎么制作iso本地repo镜像源仓库? 通过本地iso镜像,copy到linux系统中一个目录中,进行伪文件系统挂载,执行如下命令: 挂载:mount -o loo ...
- Erlang+RabbitMQ Server的详细安装
Erlang(['ə:læŋ])是一种通用的面向并发的编程语言, 它有瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境. Erlang官网:ht ...
- session安全&&CBC字符反转攻击&&hash拓展攻击
session安全 p神写的: 在传统PHP开发中,$_SESSION变量的内容默认会被保存在服务端的一个文件中,通过一个叫"PHPSESSID"的Cookie来区分用户.这类se ...
- fastjson 1.2.6以下版本 解析字符串末尾出现/x会陷入死循环 报oom异常
记一次使用阿里fastjson遇到的问题 项目最好将fastjson版本升级到1.2.6或以上版本 1.2.6以下版本存在漏洞,测试如下代码直接报错 public class FastJsonTest ...
- Istio 运维实战系列(3):让人头大的『无头服务』-下
本系列文章将介绍用户从 Spring Cloud,Dubbo 等传统微服务框架迁移到 Istio 服务网格时的一些经验,以及在使用 Istio 过程中可能遇到的一些常见问题的解决方法. 失败的 Eur ...
- [vue-webpack-template] webpack配置全局less引入
1. 项目模板webpack vue init webpack <项目名> 2. 安装依赖 除了less所需的less less-loader两个包以外,还需要安装style-resour ...
- web框架推导
django 引言 所有的web应用本质上就是一个socket服务端,而用户的浏览器. 软件开发架构 cs架构 bs架构 本质上,bs架构也是cs架构 http协议 网络协议 http协议 数据传输是 ...