测试-----selenuim webDriver

文章目录

  • 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.mzph.cn/news/77843.shtml

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

相关文章

网络安全宣传周|探索AI数字人的魅力和价值所在

9月11日至9月17日是国家网络安全宣传周,在福州举办的安全博览会上有着多种人工智能模型产品亮相现场,吸引着众多参观者的目光,尤其是AI数字人面对不同的问题、不同的场景都可以进行实时响应,不同于冷冰冰的传统智能客服的对话场景…

前端面试合集(二)

前端面试题合集 1.懒加载的原理及实现了解吗2.如何理解JS异步3.阐述一下 JS 的事件循环4.JS 中的计时器能做到精确计时吗?为什么? 1.懒加载的原理及实现了解吗 原理:当图片没有到达可视范围内时,图片不加载,当图片一旦…

Mobileye CEO来华:只有能控制住成本的公司,才能活下来

‍作者|德新 编辑|王博 上午9点近一刻,Mobileye CEO Amnon Shuashua步入酒店的会议室。由于Amnon本人是以色列希伯来大学的计算机科学教授,大部分人更习惯称他为「教授」。 时近以色列的新年,这趟教授的中国之行安排十分紧凑。 他率领了一…

遥遥领先的内存函数

目录 ​编辑 函数介绍 1.1 strlen 1.2 strcpy 1.3 strcmp 1.4 strcat 1.5 strstr 2.1 memcpy 2.2 memmove 2.3 memcmp 函数实现 1.1 strlen 1.2 strcpy 1.3 strcmp 1.4 strcat 1.5 strstr 2.1 memcpy 2.3 memcmp 函数介绍 1.1 strlen size_t strlen ( const char *…

SpringBoot整合Redis,基于Jedis实现redis各种操作

前言&#xff08;三步教你学会redis&#xff0c;主打一个实用&#xff09; springboot整合redis步骤&#xff0c;并基于jedis对redis数据库进行相关操作&#xff0c;最后分享非常好用、功能非常全的redis工具类。 第一步&#xff1a;导入maven依赖 <!-- springboot整合re…

小程序代码管理

“微信开发者工具”点击版本管理&#xff0c;然后点击代码管理会打开代码管理网页。 选择对应的项目组。 进来后点击创建项目。 输入git名称&#xff0c;然后选择命名空间&#xff0c;最后创建即可。 在刚才的“微信开发者工具”选择设置&#xff0c;然后添加远程。 输入名称&…

朋友圈大佬都去读研了,这份备考书单我码住了

作者简介&#xff1a; 辭七七&#xff0c;目前大二&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…

pycharm安装jupyter,用德古拉主题,但是输入行全白了,看不清,怎么办?

问题描述 今天换了以下pycharm主题&#xff0c;但是jupyter界面输入代码行太白了&#xff0c;白到看不清楚这行的字&#xff0c;更不知道写的是什么&#xff0c;写到哪了&#xff0c;这还是挺烦人的&#xff0c;其他都挺正常的。 问题分析 目前来看有两个原因&#xff1a; 1、…

【新版vscode配置自动补全括号】

vscode新版配置自动补全括号方法 新版配置方法(Pylance) ①设置 -> 扩展 -> Pylance -> 将 python.analysis.completeFunctionParens 下方的选项打勾 ②直接在settings.json中添加"python.analysis.completeFunctionParens": true

【Apollo】自动驾驶技术的介绍

阿波罗是百度发布的名为“Apollo&#xff08;阿波罗&#xff09;”的向汽车行业及自动驾驶领域的合作伙伴提供的软件平台。 帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统&#xff0c;快速搭建一套属于自己的自动驾驶系统。 百度开放此项计划旨在建立一个以合作为中…

CSS - 快速实现悬浮吸顶,当页面滑动一定距离时固定吸附在顶部(position: sticky)

效果图 如下图所示&#xff0c;利用 position: sticky 属性轻松实现。 示例代码 新建一个 *.html 文件&#xff0c;一键复制运行起来。 <body><section class"content"><div class"item">我是悬浮吸顶区域</div><h1>我是…

AI时代:探索机器学习与深度学习的融合之旅

文章目录 1. 机器学习和深度学习简介1.1 机器学习1.2 深度学习 2. 为什么融合是必要的&#xff1f;2.1 数据增强2.2 模型融合 3. 深入分析&#xff1a;案例研究3.1 传统机器学习方法3.2 深度学习方法3.3 融合方法 4. 未来展望结论 &#x1f389;欢迎来到AIGC人工智能专栏~AI时代…

【Java Web】HTML 标签 总结

目录 1.HTML 2.标签 1. head 标签 1.图标 2.样式居中 2. body 标签 1.注释 &#xff1a; 2.加载图片 3.加载视频 效果 4.区域 效果 5.上下跳转&#xff0c;页面跳转 效果 6.表格 效果 7.有序列表&#xff0c;无序列表 效果 8.登录 效果 9.按钮 10.多选框…

Web之tomcat

[TOC]&#xff08;文章目录&#xff09; 1.程序架构 1.C/S(client/server) 比如&#xff1a;QQ、 微信、 LOL 优点&#xff1a;有一部分代码写在客户端&#xff0c; 用户体验比较好。 缺点&#xff1a; 服务器更新&#xff0c;客户端也要随着更新。 占用资源大。 2. B/S(brows…

【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/)摘要和结论引言&#xff1a;针对痛点和贡献相关工作模型框架思考不足之处 2.…

C语言双向链表

文章目录 前言双向链表链表头结点的创建节点尾插与尾删节点头插与头删特定位置插入或删除节点链表节点查找双向链表的销毁 链表的打印 前言 假期时间因为为学校开学考试做准备所以一直没更新博客&#xff0c;今天开始博客会陆续更新。 双向链表 之前我们说过了顺序表和单链表…

嵌入式这个领域会变得过于内卷吗?

今日话题&#xff0c;嵌入式这个领域会变得过于内卷吗&#xff1f;嵌入式开发主要服务于第二产业&#xff0c;尤其是制造业&#xff0c;包括电器、电气、机械、汽车、装备、航空航天等行业的“智能制造”部门&#xff0c;稳定性较强&#xff0c;不像互联网行业那样波动大。因此…

无涯教程-JavaScript - XNPV函数

描述 XNPV函数返回的现金Stream量表的净现值不一定是周期性的。要计算一系列定期现金Stream量的净现值,请使用NPV函数。 语法 XNPV (rate, values, dates)争论 Argument描述Required/OptionalRateThe discount rate to apply to the cash flows.RequiredValues 与日期付款时…

【javaSE】 反射与反射的使用

文章目录 &#x1f332;反射的定义&#x1f38d;反射的用途&#x1f334;反射基本信息&#x1f340;反射相关的类&#x1f6a9;Class类(反射机制的起源 )&#x1f388;Class类中的相关方法 &#x1f6a9;反射示例&#x1f388;获得Class对象的三种方式&#x1f388;反射的使用 …

Linux CentOS7修改命令行提示符

在CentOS操作系统中&#xff0c;命令和文件是我们与计算机进行交互的重要方式之一。有时候我们可能需要对某些命令、变量或文件进行修改&#xff0c;以满足特定的需求或提高工作效率。 本人在文章《Linux CentOS7命令及命令行》中对命令行提示符的修改作了初步介绍&#xff0c…