测试-----selenuim webDriver

news2024/11/30 3:17:43

文章目录

  • 1.页面导航
  • 2.元素定位
  • 3. 浏览器操作
  • 4.获取元素信息
  • 5. 鼠标的操作
  • 6. 键盘操作
  • 7. 元素等待
  • 8.下拉框
  • 9.弹出框
  • 10.滚动条
  • 11.frame处理
  • 12.验证码处理(cookie)

1.页面导航

  1. 首先是导入对应的包 :from selenium import webdriver
  2. 然后实例化:driver = webdriver.Edge()
  3. 然后获取窗口:driver.get('http://www.toutiao.com/')
  4. 接着进行向前向后更新关闭
  1. 向前 driver.forward()
  2. 向后 driver.back()
  3. 更新 driver.refresh()
  4. 关闭 driver.quit()
  1. 拖动窗口: driver.execute_script([js])
  2. cookie的调用:
  1. get_all_cookies(): 获取所有cookie的信息
  2. delete_all_cookies():删除所有的cookie
  3. get_cookie([name]):返回字典的key为[name]的cookie
  4. add_cookie([cookie_dict]):添加cookie
  5. delect_cookie([name],[optionsString]):删除cookie信息
  1. 打开多窗口
  1. JS='window.open ("https : //www.sogou.com")
  2. driver.execute script (JS)

2.元素定位

Selenium提供了如下8种定位方式:

  1. 根据ID定位:find_element_by_id() (目前已经弃用,使用.find_element(By.ID,‘id名’),但是在这个之前要导入from selenium.webdriver.common.by import By)

#在输入框输入selenium并且按下搜索键
driver.find_element_by_id("kw") .send_keys ("selenium")
driver.find_element_by_id("su") .click()

  1. 根据name定位 find_element_by_name()

在输入框输入selenium并且按下搜索键
driver.find_element_by_name('wd').send_key('selenuim')
`driver.find_element_by_name(‘su’).click()

  1. 根据xPath定位
  1. //*[@id=‘kw’]。
  2. //*[@name=‘wd’]。
  3. //input[@class=‘s ipt’]
  4. /html/body/form/span/input。
  5. //span[@class=‘soutu-btn’]/input。
  6. //form[@id=‘form’] /span/input。
  7. //input[@id=‘kw’ and @name=‘wd’]
    通过名字查找并且输入搜索词
    driver.find element by xpath(r'//*[@id="kw"]') .send keys ("selenium")
  1. 根据标签名定位 find_element_by_tag_name()
  2. 根据类名定位: find_element_by_class_name()
  3. 根据css选择器定位:find_element_by_css_selector()
  4. 根据链接文本定位:find_eleent_by_link_text()
  5. 根据部分链接文本定位:find_element_by_partial_link_text()

3. 浏览器操作

  1. maximize_window():最大化浏览器
  2. set_window_size(width,height):设置窗口大小
  3. set_window_position(x,y) 元素定位
  4. back()返回
  5. forward() 前进
  6. refresh()更新
  7. close() 关闭当前页面
  8. title:获取浏览器的驱动对象
  9. quit()关闭浏览器
  10. current_url 获取当前页面的URL

4.获取元素信息

  1. size 返回元素的大小
  2. text 返回元素的文本
  3. get_attribute(‘222’) 获取元素的属性值,
  4. is_displayed() 判断元素是不是可见的
  5. is_enable()判断元素是不是可用的
  6. is_selected()判断元素是否选中
    案例:
#1. 通过selenium访问python 的官网
from  selenium  import  webdriver
import  time
from  selenium.webdriver.common.by import By
#实例化浏览器对象
driver = webdriver.Edge()

# 打开对应的页面
driver.get('https://cn.bing.com/')
driver.maximize_window()
driver.find_element(By.ID,'sb_form_q').send_keys('天气网')
driver.find_element(By.TAG_NAME,'svg').click()
time.sleep(2)
driver.get('http://www.weather.com.cn/')
driver.find_element(By.TAG_NAME,'h2').click()
# 判断元素的大小
time.sleep(2)
result = driver.find_element(By.CLASS_NAME,'picShowOne')
print(result.size)

# 获取元素的文本
result2= driver.find_element(By.TAG_NAME,'a')
print(result.text)

# 获取元素的属性
result3= driver.find_element(By.TAG_NAME,'a')
print(result3.get_attribute('class'))


# 睡眠几秒钟
time.sleep(2)
# 退出界面
driver.quit()

输出结果为:

在这里插入图片描述

5. 鼠标的操作

说明:在Seleium中,将操作鼠标的方法封装在ActionChains类中
操作步骤:
首先实例化对象:
action= ActionChains(drivers)

然后使用方法:

  1. context_click(element) ---->右击
  2. double_click(element) ----> 双击
  3. drag_and_drop(source,tar) ----->拖动
  4. move_to_element(element) ----->悬停
  5. perform()----->执行以上所有操作

#1. 通过selenium访问python 的官网
from  selenium  import  webdriver
import  time
from  selenium.webdriver.common.by import By

# 导入包
from selenium.webdriver import ActionChains
# 打开对应的页面
#实例化浏览器对象
driver = webdriver.Edge()
driver.get('https://cn.bing.com/')
driver.maximize_window()

element = driver.find_element(By.ID,'sb_form')
#实例化ActionChains对象
action = ActionChains(driver)

# 调用右键
action.context_click(element)
# 执行
action.perform()
# 睡眠几秒钟
time.sleep(2)
# 退出界面
driver.quit()

实例:打开bing 界面,输入天气,暂停三秒,双击鼠标左键然后选中天气

打开bing 界面,输入天气,暂停三秒,双击鼠标左键然后选中天气

#1. 通过selenium访问python 的官网
from  selenium  import  webdriver
import  time
from  selenium.webdriver.common.by import By

# 导入包
from selenium.webdriver import ActionChains
# 打开对应的页面
#实例化浏览器对象
driver = webdriver.Edge()
driver.get('https://cn.bing.com/')
driver.maximize_window()

element = driver.find_element(By.ID,'sb_form_q')
element.send_keys('天气')
time.sleep(3)
#实例化ActionChains对象
action = ActionChains(driver)

# 调用右键
action.double_click(element)
# 执行
action.perform()
# 睡眠几秒钟
time.sleep(2)
# 退出界面
driver.quit()


鼠标拖拽操作步骤

  1. 源文件 source=driver.find_element(By.ID,‘id_name1’)
  2. 目标文件 target= driver.find_element(By.ID,‘id_name2’)
  3. 调用方法:action.drag_and_drop(source,target).perform()

鼠标悬停操作:将鼠标悬停在搜索按钮上

#打开bing 界面,输入天气,暂停三秒,双击鼠标左键然后选中天气

#1. 通过selenium访问python 的官网
from  selenium  import  webdriver
import  time
from  selenium.webdriver.common.by import By

# 导入包
from selenium.webdriver import ActionChains
# 打开对应的页面
#实例化浏览器对象
driver = webdriver.Edge()
driver.get('https://cn.bing.com/')
driver.maximize_window()

element = driver.find_element(By.ID,'sb_form_q')
element.send_keys('天气')
time.sleep(3)
#实例化ActionChains对象
action = ActionChains(driver)
element2 = driver.find_element(By.TAG_NAME,'svg')
# 鼠标悬停
action.move_to_element(element2)
# 执行
action.perform()
# 睡眠几秒钟
time.sleep(2)
# 退出界面
driver.quit()

6. 键盘操作

  1. 导入的包 from selenuim.webdriver.common.keys import Keys
  2. 常用的键盘操作:
  1. send_keys(Keys.BACK_SPACE) 删除键
  2. send_keys(Keys.SPACE) 空格键
  3. send_keys(Keys.TAB) 制表键
  4. send_keys(Keys.ESCAPE) 回退键
  5. send_keys(Keys.ENTEN) 回车键
  6. send_keys(Keys.CONTROL.‘a’) 全选键
  7. send_keys(Keys.CONTROL.‘c’) 复制

7. 元素等待

  1. 什么是元素等待

定位页面的时候如果没有找到,会在指定的时间内进行一直等待

  1. 为什么要设置元素等待

网速慢,电脑配置低,服务器请求慢

  1. 元素等待类型
  1. 隐式等待:
  1. 定位元素的时候,如果能够定位到则返回元素,如果不能定位到,则间隔一定的时 间进行等待,等待一定的时间后,还是没有找到元素的话就抛出没有找到元素异常现象。
  2. 使用方法: driver.implicitly_wait(timeout) :timeout:等待的最大时间
  1. 显式等待:
  1. 定位指定元素时,如果能定位到元素直接返回该元素,不触发等待,如果不能定位到该元素,则间隔一段时间后再去定位该元素,如果达到最大的时间长度还没有定位该元素,则抛出超时异常(TimeoutException)(时间短,与隐式的不同是:隐式只能控制等待时长,不能控制间隔时间,而显式能够控制间隔时间和等待时长)
  2. 实现方法:
  1. 导入相应的包 : from selenium.webdriver.support.wait import webDriverWait
  2. WebDriverWait(driver,timeout,poll_frequency=0.5)
  1. driver: 浏览器驱动对象
  2. timeout: 超时时长
  3. poll_frequency: 检测时间间隔
  1. nutill(method) 直到----才
  2. element = WeDriverWait(driver,10 ,1 ).nutill(lambda x : x.find_element(By.ID,'userA'))

8.下拉框

  1. 下拉框能够直接获取元素进行操作
  2. select类
  1. 导入包: from selenuim.webdirver.suppport.select import Select
  2. 实例化对象

select = Select(element) :element表示选择的下拉框的元素

  1. 操作方法
  1. select_by_index(index) -----> 根据option索引来定位,从零开始
  2. select_by_value(value) -----> 根据option 的value来定位,
  3. select_by_visible_text(text) -----> 根据option 的文本来定位,

9.弹出框

  1. 获取弹出框对象: alert= driver.switch_to.alert
  2. 调用:
  1. alert.text() ----> 返回alert/confirm/prompt 中的文字信息
  2. alert.accept() ----> 接受对话框选项
  3. alert.dismiss() -----> 取消对话框选项
    实例代码:
# 定位alert按钮
driver.find_element(By.ID,'alerta').click()
# 获取警告框
alert = driver.switch_to_alert
# 打印警告框文本
print(alert.text)
# 接受警告框
alert.accept()
# 取消警告框
alert.dismiss()

10.滚动条

  1. 应用场景:
  1. 在Html 页面中,由于前端技术框架原因,页面元素为动态显示,元素根据滚动条的下拉而被加载.
  2. 页面注册同意条款,需要滚动条到最底层,才能点击同意
  1. 实现方式

设置javascript脚本控制滚动条 js = ''window.scrollTo(0,10000)''
使用js代码的方法 driver.execute_script(js)

11.frame处理

frame切换,多窗口切换

  1. frame是Html的一种框架,主要作用是在当前页面中指定区域显示另一个页面的元素:

12.验证码处理(cookie)

  1. 验证码处理方式:

1 , selenium 中没有对验证码的处理方式,
2. 去掉验证码:(测试环境下—采用)
3. 设置万能验证码: (生产环境下采用)
4. 验证码识别技术(用python-tesseract识别图形)
5. 记录cookie (通过记录cookie进行跳过登陆)

  1. 什么是cookie
  1. cookie是web服务器生成的,并且保存在用户浏览器中的小文本文件,包含用户相关信息
  2. cookie数据格式:键值对组成形式
  3. cookie产生:客户端请求服务器,如果服务器需要记录改用户状态,就像客户端浏览器颁发cookie数据
  4. cookie使用:当浏览器再次请求网站时,浏览器将请求的数据和cookie数据一同提交给服务器,服务器检查cookie信息用来判断用户的状态
  1. 执行过程
  1. 首次客户端发送请求——————>客户端
  2. 客户端发送响应和设置的cookie值---------->服务器
  3. 下次客户端发送请求和cookie值------------->服务器
  4. 客户端发送响应
  1. cookie的绕过原理

客户端登陆账号后,将登陆状态相关的cookie信息发送给服务器保存,在发送请求,携带的cookie信息如果和服务器保留一致,则服务器认为客户端为登陆状态
操作步骤:百度————》网络——————》application ----->BDUSS(取其值和value)
方法:

1.get_cookie(name) 获取指定的cookie
2. get_cookies() 获取网站上面的所有的本地的cookie
3. add_cookie(cookie_dict) 添加cookie

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为什么大家都在用 WebP?

WebP 是谷歌在 2010 年提出的一种新型的图片格式,放到现在来讲,已经不算是“新”技术了,毕竟已经有了更新的 JPEG XL 和 AVIF 。但是在日常工作中,大家时常会碰到保存下来的图片的后缀是 .webp。那么 WebP 到底有什么魔力&#xf…

Explain 性能分析

目录 1. 能干什么 2. 如何分析 3. 各字段解释 1. 能干什么 使用 explainsql 的方式,分析查询语句的性能瓶颈。 ① 表的读取顺序; ② 数据读取操作的操作类型; ③ 哪些索引可以使用; ④ 哪些索引被实际使用; ⑤ 表之…

Latex之在作者名字后面加上OCRID的图标

\usepackage{orcidlink} \author{Bob\textsuperscript{\orcidlink{0000-0000-0000-0000}}}效果如图

Java8实战-总结27

Java8实战-总结27 用流收集数据分区分区的优势将数字按质数和非质数分区 用流收集数据 分区 分区是分组的特殊情况:由一个谓词(返回一个布尔值的函数)作为分类函数,它称分区函数。分区函数返回一个布尔值,这意味着得到的分组Map的键类型是B…

浅谈C++|STL初识篇

一.STL的诞生 长久以来,软件界一直希望建立一种可重复利用的东西。 .C的面向对象和泛型编程思想,目的就是复用性的提升 大多情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作 为了建立数据结构和算法的一套标准,诞…

linux入门---命名管道

如何创建命名管道 使用mkfifo函数就可以在程序里面创建管道文件,该函数的声明如下: 该函数需要两个参数,第一个参数表示要在哪个路径下创建管道文件并且这个路径得待上管道文件的名字,因为每个文件都有对应的权限,所…

基于springboot+vue的网络海鲜商城

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

【Spatial-Temporal Action Localization(二)】论文阅读2017年

文章目录 1. ActionVLAD: Learning spatio-temporal aggregation for action classification [code](https://github.com/rohitgirdhar/ActionVLAD/)[](https://github.com/rohitgirdhar/ActionVLAD/)摘要和结论引言:针对痛点和贡献相关工作模型框架思考不足之处 2.…

Windows下防火墙端口配置

在电脑或者服务器上部署某个应用后,如果需要对外提供服务可能就需要在主机防火墙上设置开启需要的端口,那么具体怎样操作呢 1.打开windows防火墙 2.设置防火墙入站规则 如下图“高级安全Windows Defender 防火墙”页面,点击左侧“入站规则”…

5.10.WebRTC接口宏

那今天呢?我给大家介绍一下web rtc的接口宏,那之所以在现成的章节中要介绍接口宏。是由于接口在调用的过程中啊,会发生线程的切换,所以把接口宏这部分知识我们放在线程这一章还算比较合适的。 那另外呢,我们对于接口…

【Linux-day11-线程的创建与同步】

Linux 线程的创建与同步 线程的概念 线程是进程内部的一条执行序列或执行路径,一个进程可以包含多条线程。 进程与线程的区别 进程是资源分配的最小单位,线程是 CPU 调度的最小单位进程有自己的独立地址空间,线程共享进程中的地址空间进…

ODC解读:数据脱敏在数据库协同开发的关键作用

肖杨 OceanBase生态产品研发工程师 OceanBase 生态产品研发工程师,山地骑行爱好者,ODC 团队核心成员,负责数据安全合规和系统集成,对 Java EE、 AI 大模型、MCU 芯片 等技术有着浓厚兴趣。 在数据库协同开发领域,敏感…

Spring MVC 七 - Locale 本地化

Spring各模块都支持国际化,SpringMVC也同样支持。DispatcherServlet通过Locale Resovler自动根据客户端的Locale支持国际化。 request请求上来后,DispatcherServlet查找并设置Locale Resovler,我们可以通过RequestContext.getLocale()获取到…

ipad手写笔哪个好用?电容笔性价比高的品牌

现今,使用电容笔的人越来越多,各大品牌厂商对于电容笔各种性能的设计也愈发用心。那么,电容笔哪个品牌性价比高?下面,我来给大家推荐几款好用又平价的电容笔,可以当个参考。 一、主动式电容笔和被动式电容…

mysql 密码修改

1、使用mysqladmin修改root密码 使用 mysqladmin 命令修改 MySQL 的 root 用户密码格式为 mysqladmin -u用户名 -p旧密码 password 新密码 注意:下图修改密码的命令中 -uroot 和 -proot 是整体,不要写成 -u root -p root,-u 和 root 间可以加…

分享一下蛋糕店怎么在微信小程序上开店

蛋糕店如何在微信小程序上开店 随着移动互联网的发展,微信小程序作为一种新型的商业模式,正逐渐成为各行各业拓展线上业务的重要手段。对于蛋糕店来说,利用微信小程序开店,不仅有利于拓展销售渠道,还能提高品牌知名度…

动漫小可爱-网页添加L2Dwidget.js

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>动漫小可爱</title><link rel"stylesh…

windows下MySQL服务不见,服务无法启动,服务闪退,提示“本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止”

文章目录 前情提示1.解决MySQL服务消失2.解决MySQL服务无法启动 前情提示 后台启动MySQL服务出现闪退 或 “本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止”&#xff0c;可以参考以下方法。 我的电脑上安装了双版本MySQL&#xff0c;这里…

Zabbix监控平台概念

1.概念 Zabbix是一款开源的、免费的、分布式监控平台支持web管理&#xff0c;WEB界面可以方便管理员使用可以监控硬件服务器CPU温度、风扇转速、操作系统CPU、EME、DISK、I/O、流量宽带、负载、端口、进程等Zabbix是C/S架构&#xff0c;Client客户端和Server端组成 2.Zabbix可…

2596. 检查骑士巡视方案(Java)

骑士在一张 n x n 的棋盘上巡视。在有效的巡视方案中&#xff0c;骑士会从棋盘的 左上角出发&#xff0c;并且访问棋盘上的每个格子恰好一次 。 给你一个 n x n 的整数矩阵 grid &#xff0c;由范围 [0, n * n - 1] 内的不同整数组成&#xff0c;其中 grid[row][col] 表示单元格…