【总结】ui自动化selenium知识点总结

1. 大致原理

首页安装第三方库selenium库,

其次要下载好浏览器驱动文件,比如谷歌的 chromedriver.exe,配置上环境变量。

使用selenium的webdriver类去创建一个浏览器驱动对象赋值叫driver,一个浏览器驱动对象就可以

  • 实现 对浏览器得操作
  • 页面 元素的定位
  • 元素的操作

(原理:代码--->发送http请求-----> 到了真正的浏览器驱动中的http server----->浏览器才执行步骤)

from selenium import webdriver
driver = webdriver.Chrome()

2. 浏览器

浏览器的操作

  • 比如 get 访问网页、close关闭当前页、quit离开整个浏览器
  • set_window_size设置窗口大小(最大化maximize_window(),最小化minimize_window)、
  • 页面前进后退刷新等,# .forward() .back() .refresh()
  • 浏览器标签页(窗口)的切换用到  swith_to.window(handle)
    • 再结合.window_handles获取 句柄列表 [ ]
    • 常见用法 1, 使用索引-1, 打开最新的标签页。 handles_list = driver.window_handles driver.switch_to.window(handles_list[-1]) # 切换到最后一个 handles
    • 常见用法 2, 遍历switch_to 到每个一个handle上, 使用title来判断是否break, 这样就到了想去的页面 代码用法
  • 浏览器的滚动条也是能控制上下滚动: driver.excute_script() 可以用户js语句实现任意页面上的操作,
    • 滚动条--"window.scrollTo(0,10000)" # 0表示向右移动 0
    • 比如一个日期控件的元素是有readonly属性,不能输入值,就可以写个js语句把它去掉。js="document.getElementById(id值').removeAttribute('readonly')"
      • 滚动到指定元素可见(方式2)
      • document.getElementById('password').type="text" # 修改元素属性
  • save_screenshot('./window.png') 保存【整屏截图】 (尺寸打开是多大就截多大) element.screenshot('./ele.png')   元素截图
    • 或 保存【整屏截图】 .get_screenshot_as_file("./all.png") (源码中,save_screentshot 就用的它)

(截全屏,和元素截图的另一种方式)

# 屏幕截图另一个格式
get_screenshot_as_png 这个是不带文件参数的,就需要用with open 来创建
with open('window1.png','wb') as f:f.write(driver.get_screenshot_as_png())# 元素截图另一种格式
另外元素截图还可以用这种,也是也是需要用with open打开
with open('code.png','wb') as f:f.write(ele_code.screenshot_as_png)			# 把图片变成字节流的数据# 补充知识(OCR识别):
ele_bytes = ele_code.screenshot_as_png
import ddddocr					# pip install ddddocr -i https://pypi.tuna.tsinghua.edu.cn/simple/
ocr=ddddocr.DdddOcr(show_ad=False)			# 参数表示去掉广告
text = ocr.classification(ele_bytes)		# 提取文本信息或者 
with open('xxx.png' ,'rb') as f:			# r表示读,  b表示二进制  也是字节流的数据data = f.read()

截图可以使用的地方:可以用来截取验证码,然后ocr识别图片上的文本

浏览器的获取

  • driver.get_cookies() (需要手动登录一次),遍历得到的cookie列表,然后dirver.add_cookie(i), 就可以实现绕过登录
  • driver.current_url 获取当前url
  • driver.title 获取标题
  • driver.get_window_size() 获取浏览器尺寸 --得到的是字典格式{'width': 945, 'height': 1020}
  • driver.current_window_handle driver.window_handles 结合swith_to_window 来使用

3. 元素定位与操作

元素定位

  • 我一般选择使用css定位,像 id,name,classname,tag_name这些底层都是通过css来定位的
  • 而且css定位比较方便,可以用
    • 标签选择器,和 #id值 .class值
    • 属性选择器,(可以属性等于某个值,属性以某个值开头,或包含某个值)
    • 路径选择器,(比如空格表示,后代, > 表示找儿子)
    • 伪类选择器 (比如:ntrh-child(n))
  • 如果要根据某个元素的文本值来定位,或者要根据一个标签多个属性值组合判断,我就会用到xpath定位
    • //*[text(),"文本"] //*[contains(text(),"文本")] (这种方式也能代替link_text)
    • //*[@id="id1",@class="class1"]
  • 其他: find_element 是找一个元素, find_elements, 是把能找到的装到列表里面,找不到也不会报错,是返回空列表
driver.find_element(By.CSS_SELECTOR,'#multiSelect')

8种定位方式,面试前背背就行。。

页面F12, 可以ctrl F进行搜索

下图也是不用专门背

Xpath定位(这两种要用的):

        //*[text(),"文本"] //*[contains(text(),"文本")]

        //input[@id='kw' and @class]

元素操作 

按钮、输入框 (单选框) 代码举例

  • 常用的点击click、输入文字send_keys补充:追加写入)、清空文字clear、submit,get_attribute() 获取属性,.tag_name .text 坐标尺寸 .location .size, .rect更准的坐标尺寸 等

多选框 代码举例

  • 需要用 is_selected() 是否选中 判断多选框是否选中(bool),然后click (is_displayed() 是否可见 有hidden属性的 is_enabled() 是否可用 有disabled属性的)

        例: se = ele.is_selected() if se: print("已经被选中")

特殊一点的1: select元素 下拉框的选择 代码举例

方式1(只适用于select标签):

 

  • 先实例化一个选择对象, select = Select (ele) # 参数为元素对象
    • select_by_index
    • select_by_value
    • select_by_visible_text
    • deselect_all() 反选
  • 方式2(div的下拉选择,或者select都行)
    • 直接用send_keys("某个值") --- 定位到選項标签
    • 或者直接click --- 定位到其中的一项

特殊一点的2: alert警告框的处理

警告框出来后,首先要driver.switch_toalert

  • 点accept() , 确认
  • 点dismiss(), 取消
  • 点send_keys(), 输入
  • 或者 点text 不要()

键盘操作元素

记住是通过send_keys,完成的就行了,然后传入键盘的值, 用的少,也没难度,用时查

如:对【提交按钮】元素进行,回车键

对【输入框】元素进行,ctrl A, ctrl C V 等, (Keys.键*数字) 表示多次操作 如回退 Keys.BACKSPACE*2 等

如下图,是百度提交

鼠标操作 代码笔记

从selenium引入ActionChains类,然后action = ActionChains(driver)实例化一个action对象

from selenium.webdriver import ActionChains

练习地址:https://sahitest.com/demo/

ActionChains(driver).动作1.动作2.perform() 它是一个链式调用

拖动滑块也能实现   drag_and_drop_by_offset(ele,向右的x,向下的y))

ui自动化需掌握的知识点还有:

嵌套网页

遇到有 iframe的元素嵌套网页,需要先先使用到 switch_to点frame(iframe元素de定位) ,切换到对应frame,才能进行元素操作,

另外它还有返回上层页面,和默认地方的操作(百度下)

  • driver.switch_to.frame(ele), # 参数除了是元素定位ele,还可以是 id name, 或者通过索引号
  • driver.switch_to.parent_frame()      返回上一层
  • driver.switch_to.default_content()   调回最外层

文件上传 代码演示

http://42.192.62.186:8088/index.html#/home 账号密码: sq3 123 万能验证码:999999

普通的input框,直接用send_keys,传图片路径

非input框,用python第三方库,pypiwin32 或者 pyautogui 结合pyperclip

 ui自动化其他必备知识点

隐式等待 和显示等待 代码演示

隐式等待

driver.implicitly_wait(30) 可以设置一个最大等待时间,等页面加载完,才会去执行后面的找元素。 不然加载没出来,就找元素,会报错。

比如在渲染页面时,如果不等待直接去找,会找不到。

显示等待

找一种元素时,可以不停的找,直到它可见,就找到。

它的逻辑有点像下面这种(轮询去找,最后超过时间就不等了)

导入一个等待条件 (直接出现,或者直接可见),和一个webDriverWait类。

 

小补充:

  1. 元素ele点location_once_scrolled_into_view等 滚动到可见----
    1. 如例子:https://www.runoob.com/ 页面下放的元素
  2. ele.value_of_css_property('color') 获取CSS属性值
  3. 元素上找元素 (第4课,2节)
  4. 冻屏操作(针对那种不好定位元素)---自己百度, 如:百度输入框,输入了 学习两个字,弹窗上面的元素不好捕获
  5. setTimeout(()=>{debugger;},5000) 表示5秒后debugger. 就可以先在consloe里输入,回车,然后去页面上操作,让页面挺住就可以操作

滚动到可见代码 和 获取css属性值的例子

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('https://www.runoob.com/')
sleep(2)
#打开了人看不到,但是网页这个树加载好了,这个元素可能就可以操作
# driver.find_element_by_xpath("//h4[contains(text(),'【网站主机教程】')]").click()ele_host = driver.find_element(By.XPATH,"//h4[contains(text(),'【网站主机教程】')]")
ele_host.location_once_scrolled_into_view       # 报黄,但是不影响,  滚动条会自动下去
print(ele_host.value_of_css_property('color'))  #rgba(100, 133, 76, 1)

元素上找元素

http://42.192.62.186:8088/index.html#/demo/13

'''
知识点:webelement的find_element_xxxx方法
'''
from selenium import webdriver
import time
driver = webdriver.Chrome()
from selenium.webdriver.common.by import By
driver.implicitly_wait(5)
driver.get("http://42.192.62.186:8088/index.html#/")
driver.maximize_window()
# 账号密码
driver.find_element(By.CSS_SELECTOR, '#username').send_keys('sq3')
driver.find_element(By.CSS_SELECTOR, '#password').send_keys('123')
driver.find_element(By.CSS_SELECTOR, '#code').send_keys('999999')driver.find_element(By.CSS_SELECTOR, "#submitButton").click()
time.sleep(1)
driver.refresh()
time.sleep(1)
driver.find_element(By.XPATH, "//span[contains(text(),'按钮')]").click()
driver.find_element(By.XPATH, "//li[contains(text(),'下拉框')]").click()# 方式1 ,点击选项
driver.find_element(By.XPATH, "//*[contains(text(),'3C数码')]").click()
time.sleep(3)
# 方式1 ,CSS定位
driver.find_element(By.CSS_SELECTOR, "#categoryId > option:nth-child(3)").click()time.sleep(3)
# 方式2,在下拉框上, 再找
"""元素上找元素  (分布找--------代码封装时有用),  缩小范围找"""
driver.find_element(By.ID, 'categoryId').find_elements(By.TAG_NAME, 'option')[5].click()
#找到id=categoryId的元素,在它下面找标签为option的元素

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/355428.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python爬虫之selenium自动化操作

python爬虫之selenium自动化操作 需求:操作淘宝去掉弹窗广告搜索物品后进入百度回退又前进 selenium模块的基本使用 问题:selenium模块和爬虫之间具有怎样的关联? 1、便捷的获取网站中动态加载的数据 2、便捷实现模拟登录 什么是selenium模块&#x…

【python】PyQt5初体验,窗口等组件开发技巧,面向对象方式开发流程实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

文件扫描工具哪个好?便捷的文件扫描工具推荐

对于初入职场的大学毕业生,申请就业补贴是一项不可忽视的福利。 它不仅能够为新生活带来经济上的缓解,也有助于职业生涯的顺利起步。面对申请过程中需提交的文件,如纸质劳动合同,不必烦恼。市面上众多文件扫描软件能助你一臂之力…

轮式机器人Swiss-Mile城市机动性大提升:强化学习引领未来城市物流

喜好儿小斥候消息,苏黎世联邦理工学院的研究团队成功开发了一款革命性的机器人控制系统,该系统采用强化学习技术,使轮式四足机器人在城市环境中的机动性和速度得到了显著提升。 喜好儿网 这款专为轮腿四足动物设计的控制系统,能…

一种基于图卷积创新的电场强度监测模型,原创未发表!!!

声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类算法的家人,可关注我的VX公众号:python算法小当家,不定期会有很多免费代码分享~ 一种基于图卷积创新的电场强度监测模型,原创未发表…

环境配置02:CUDA安装

1. CUDA安装 Nvidia官网下载对应版本CUDA Toolkit CUDA Toolkit 12.1 Downloads | NVIDIA Developer CUDA Toolkit 12.5 Downloads | NVIDIA Developer 安装配置步骤参考:配置显卡cuda与配置pytorch - 知乎 (zhihu.com) 2. 根据CUDA版本,安装cudnn …

内容安全复习 2 - 网络信息内容的获取与表示

文章目录 信息内容的获取网络信息内容的类型网络媒体信息获取方法 信息内容的表示视觉信息视觉特征表达文本特征表达音频特征表达 信息内容的获取 网络信息内容的类型 网络媒体信息 传统意义上的互联网网站公开发布信息,网络用户通常可以基于网络浏览器获得。网络…

mysql8.0找不到my.ini

报错问题解释: MySQL 8.0 在Windows系统中通常不需要 my.ini 文件,因为安装程序会在 %PROGRAMDATA%\MySQL\MySQL Server 8.0\ (通常是 C:\ProgramData\MySQL\MySQL Server 8.0\)创建默认的配置文件。如果你的系统中找不到 my.ini…

ArcGIS查找相同图斑、删除重复图斑

​ 点击下方全系列课程学习 点击学习—>ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放 点击学习——>遥感影像综合处理4大遥感软件ArcGISENVIErdaseCognition 这次是上次 今天分享一下,很重要却被大家忽略的两个工具 这两个工具不仅可以找出属性…

解决电脑关机难题:电脑关不了机的原因以及方法

在使用电脑的日常生活中,有时会遇到一些烦人的问题,其中之一就是电脑关不了机。当您尝试关闭电脑时,它可能会停留在某个界面,或者根本不响应关机指令。这种情况不仅令人困惑,还可能导致数据丢失或系统损坏。 在本文中…

编译xlnt开源库源码, 使用c++读写excel文件

编译xlnt开源库源码,在linux平台使用c读写excel文件 下载xnlt源码 官方网站https://tfussell.gitbooks.io/xlnt/content/ 下载地址https://github.com/tfussell/xlnt 下载libstudxml开源库源码 下载地址https://github.com/kamxgal/libstudxml 下载xnlt源码 官方网站https://…

Walrus:去中心化存储和DA协议,可以基于Sui构建L2和大型存储

Walrus是为区块链应用和自主代理提供的创新去中心化存储网络。Walrus存储系统今天以开发者预览版的形式发布,面向Sui开发者征求反馈意见,并预计很快会向其他Web3社区广泛推广。 通过采用纠删编码创新技术,Walrus能够快速且稳健地将非结构化数…

C++的动态内存分配

使用new/delete操作符在堆中分配/释放内存 //使用new操作符在堆中分配内存int* p1 new int;*p1 2234;qDebug() << "数字是&#xff1a;" << *p1;//使用delete操作符在堆中释放内存delete p1;在分配内存的同时初始化 //在分配内存的时初始化int* p2 n…

海外云手机自动化管理,高效省力解决方案

不论是企业还是个人&#xff0c;对于海外社媒的营销都是需要自动化管理的&#xff0c;因为自动化管理不仅省时省力&#xff0c;而且还节约成本&#xff1b; 海外云手机的自动化管理意味着什么&#xff1f;那就是企业无需再投入大量的人力和时间去逐一操作和监控每一台设备。 通…

k8s学习--OpenKruise详细解释以及原地升级及全链路灰度发布方案

文章目录 OpenKruise简介OpenKruise来源OpenKruise是什么&#xff1f;核心组件有什么&#xff1f;有什么特性和优势&#xff1f;适用于什么场景&#xff1f; 什么是OpenKruise的原地升级原地升级的关键特性使用原地升级的组件原地升级的工作原理 应用环境一、OpenKruise部署1.安…

Python自动化(5)——ocr识字

Python自动化(5)——ocr识字 通过网络识字 网络识字的平台有很多&#xff0c;主要有百度以及科大讯飞&#xff0c;这里以百度智能云来简单示例。 首先需要在百度智能云上注册一个账号&#xff0c;并创建一个应用&#xff0c;网址&#xff1a; https://console.bce.baidu.com/…

高速异地组网怎么办理?

在当今信息化时代&#xff0c;跨地域的远程办公、远程教育、远程医疗等需求越来越多。而高速异地组网作为一种解决不同地区之间快速组建局域网的方法&#xff0c;被广泛应用。本文将介绍一款异地组网内网穿透产品——【天联】&#xff0c;并提供其办理流程。 【天联】组网是什…

LoRa126X系列LoRa模块:专为物联网设计而生

LoRa126X是思为无线研发的一款应用于物联网应用的LoRa 前端模块系列&#xff0c;采用 Semtech 公司的 SX1262和SX1268 芯片。该系列模块具有小体积、低功耗&#xff0c;高灵敏度等特点&#xff0c;并且严格遵循无铅工艺生产和测试流程&#xff0c;符合 RoHS 和 Reach 环保标准。…

oracle发送http请求

UTL_HTTP包让SQL和PLSQL能够调用超文本传输协议&#xff08;HTTP&#xff09;&#xff0c;也就是说可以使用它在Internet上访问数据。 当包用HTTPS从Web site获取数据时&#xff0c;要使用Oracle Wallet&#xff0c;它是由Oracle Wallet Manager或者orapki utility创建。非HTT…

购物网站系统

摘 要 随着互联网的快速发展&#xff0c;不同的平台软件也不断涌出市场&#xff0c;在众多的平台中&#xff0c;购物网站深受人们的欢迎&#xff0c;也成为生活中不可缺少的一部分。经过对国内外购物情况的调查&#xff0c;社区购物在近几年来成为电商发展的新趋势&#xff0c…