【Selenium(五)】

一、鼠标事件

from selenium import webdriver
# 导入ActionChains类进行鼠标悬停操作
from selenium.webdriver.common.action_chains import  ActionChains
import time# 打开一个浏览器
# 法一、添加环境变量重启电脑
# 法二、填写浏览器驱动的绝对路径
driver = webdriver.Edge(r"D:\tools\driver\msedgedriver.exe")# 设置浏览器最大化显示
driver.maximize_window()# 隐式等待
driver.implicitly_wait(10)# 打开网页
driver.get("https://www.baidu.com/")time.sleep(2)# 定位到设置
st_button=driver.find_element_by_id("s-usersetting-top")# 设置鼠标悬停
ActionChains(driver).move_to_element(st_button).perform()

二、键盘事件

# -*- coding: utf-8 -*-from selenium import webdriver
# 导入Keys类调用键盘
from selenium.webdriver.common.keys import  Keys
import time# 打开一个浏览器
# 法一、添加环境变量重启电脑
# 法二、填写浏览器驱动的绝对路径
driver = webdriver.Edge(r"D:\tools\driver\msedgedriver.exe")# 设置浏览器最大化显示
driver.maximize_window()# 隐式等待
driver.implicitly_wait(10)# 打开网页
driver.get("https://www.baidu.com/")time.sleep(2)# 定位到设置,输入内容
search_box=driver.find_element_by_id("kw")
search_box.send_keys("seleniumABC")time.sleep(3)
# 删除多余的m,调用删除键
# Keys.BACK_SPACE只能删除一个字母,要删除多个字母,需要乘几
search_box.send_keys(3*Keys.BACK_SPACE)time.sleep(3)
# 调用回车建
search_box.send_keys(Keys.ENTER)

三、获取断言信息

(1)通过文本信息判断

# -*- coding: utf-8 -*-from selenium import webdriver
# 导入Keys类调用键盘
from selenium.webdriver.common.keys import  Keys
import time# 打开一个浏览器
# 法一、添加环境变量重启电脑
# 法二、填写浏览器驱动的绝对路径
driver = webdriver.Edge(r"D:\tools\driver\msedgedriver.exe")# 设置浏览器最大化显示
driver.maximize_window()# 隐式等待
driver.implicitly_wait(10)# 打开网页
driver.get("https://www.baidu.com/")# 定位到设置,输入内容并搜索
search_box=driver.find_element_by_id('kw')
search_box.send_keys("python")
search_box.send_keys(Keys.ENTER)# 搜索出来第一页的所有内容标题
# find_element_by_xpath定位元素的方法现实的是elements,多个元素在一个列表中
titles = driver.find_elements_by_xpath('//div[@id="content_left"]//h3')
print(titles)# 由于获取结果是列表,要获取内容,必须遍历列表,一个一个获取
for t in titles:#获取文本信息print(t.text)

(2)通过title信息做断言

# -*- coding: utf-8 -*-from selenium import webdriver
# 导入Keys类调用键盘
from selenium.webdriver.common.keys import  Keys
import time# 打开一个浏览器
# 法一、添加环境变量重启电脑
# 法二、填写浏览器驱动的绝对路径
driver = webdriver.Edge(r"D:\tools\driver\msedgedriver.exe")# 设置浏览器最大化显示
driver.maximize_window()# 隐式等待
driver.implicitly_wait(10)# 打开网页
driver.get("https://www.baidu.com/")# 定位到设置,输入内容并搜索
search_box=driver.find_element_by_id('kw')
search_box.send_keys("python")
search_box.send_keys(Keys.ENTER)time.sleep(3)
# 获取网页标题
print(driver.title)

(3)根据URL判断

# -*- coding: utf-8 -*-from selenium import webdriver
# 导入Keys类调用键盘
from selenium.webdriver.common.keys import  Keys
import time# 打开一个浏览器
# 法一、添加环境变量重启电脑
# 法二、填写浏览器驱动的绝对路径
driver = webdriver.Edge(r"D:\tools\driver\msedgedriver.exe")# 设置浏览器最大化显示
driver.maximize_window()# 隐式等待
driver.implicitly_wait(10)# 打开网页
driver.get("https://www.baidu.com/")# 定位到设置,输入内容并搜索
search_box=driver.find_element_by_id('kw')
search_box.send_keys("python")
search_box.send_keys(Keys.ENTER)time.sleep(3)
# 获取当前网页URL
print(driver.current_url)

四、设置元素等待

# -*- coding: utf-8 -*-from selenium import webdriver
# 显示等待时,元素定位方式需要使用By加载
from selenium.webdriver.common.by import By# 设置显示等待
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC# 打开一个浏览器
# 法一、添加环境变量重启电脑
# 法二、填写浏览器驱动的绝对路径
driver = webdriver.Edge(r"D:\tools\driver\msedgedriver.exe")# 设置浏览器最大化显示
driver.maximize_window()# 隐式等待
driver.implicitly_wait(10)# 打开网页
driver.get("https://www.baidu.com/")# 定位到设置,输入内容并搜索
search_box=driver.find_element_by_id('kw')# WebDriverWait(浏览器driver,最大超时时间,轮询时间)
# EC.presence_of_element_located()里面接受的是元素定位方式和具体的表达式,要使用元组的形式传入
# 定位搜索框
search_obj=WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,'kw')))
# 输入内容
search_obj.send_keys("hello")
# 设置提交
# search_obj.submit()
search_obj.send_keys(Keys.ENTER)

五、多窗口切换

 浏览器打开的窗口有一个叫句柄的概念,句柄类似于每一个标签页的id一样,是唯一的。

# -*- coding: utf-8 -*-from selenium import webdriver# 打开一个浏览器
# 法一、添加环境变量重启电脑
# 法二、填写浏览器驱动的绝对路径
from selenium.webdriver.common.keys import Keysdriver = webdriver.Edge(r"D:\tools\driver\msedgedriver.exe")# 设置浏览器最大化显示
driver.maximize_window()# 隐式等待
driver.implicitly_wait(10)# 打开网页
driver.get("https://www.baidu.com/")# 定位到设置,输入内容并搜索
search_box=driver.find_element_by_id('kw')
search_box.send_keys("李克强")
search_box.send_keys(Keys.ENTER)# 获取标签页句柄
windowhandle=driver.current_window_handle
# print(windowhandle)# 点击 李克强百度百科
driver.find_element_by_xpath('//div[@id="1"]/div/h3/a').click()# 获取当前浏览器的所有窗口的句柄,获取回来的拆改纽扣句柄放在一个列表里
headles=driver.window_handles
print(headles)# 根据句柄进行切换
"""方法一
for head in headles:# 如果窗口句柄不等于打开的第一个窗口的句柄,则就是第二个if head!=windowhandle:driver.switch_to.window(head)
""""""方法二"""
# 根据下标进行句柄切换,获取回来的时候,窗口的句柄是一个列表,-1代表是最新打开的窗口句柄,0代表第一个
driver.switch_to.window(headles[-1])# 点击 播报 按钮
driver.find_element_by_xpath('//div[@class="lemmaTitleBox_EbvJX"]/div/span/span/span').click()

六、表单切换

在Web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位。这时就需要通过switch_to.frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面中。

  • switch_to.frame() 默认可以直接取表单的id 或name属性。如果iframe没有可用的id和name属性,则可以通过下面的方式进行定位
  • 除此之外,在进入多级表单的情况下,还可以通过switch_to.default_content()跳回最外层的页面。
# -*- coding: utf-8 -*-
import timefrom selenium import webdriver# 打开一个浏览器
# 法一、添加环境变量重启电脑
# 法二、填写浏览器驱动的绝对路径
from selenium.webdriver.common.keys import Keysdriver = webdriver.Edge(r"D:\tools\driver\msedgedriver.exe")# 设置浏览器最大化显示
driver.maximize_window()# 隐式等待
driver.implicitly_wait(10)# 打开网页
driver.get("https://mail.163.com/")# iframe表单切换
"""
switch_to.frame()里面可以填写iframe表单的id和name,但是id和name要唯一
还可以通过其他的定位方式定位到该iframe标签,然后将定位到iframe标签对象传入到switch
"""
# 通过XPath的方式定位iframe标签
iframe_element=driver.find_element_by_xpath('//div[@id="loginDiv"]/iframe')
driver.switch_to.frame(iframe_element)# 定位邮箱输入框
driver.find_element_by_css_selector('input[name="email"]').send_keys("xiangzc")# 定位密码框
driver.find_element_by_css_selector('input[name="password"]').send_keys("xiangzc")# 点击 登录 按钮
driver.find_element_by_id('dologin').click()time.sleep(2)
# 点击VIP,按照此方式进入失败,因为进行完上述操作后,是在子页面中,而VIP还在外层页面,所以需要切换出来
driver.switch_to.default_content()
driver.find_element_by_css_selector('a[href="https://vipmail.163.com/?from=fmail"]').click()

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

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

相关文章

功率半导体IGBT模块封装工艺

功率器件最近非常火热,作为新型功率半导体器件的主流器件,IGBT应用非常广泛,如家用电器、电动汽车、铁路、充电基础设施、充电桩,光伏、风能,工业制造、电机驱动,以及储能等领域。IGBT模块是新一代的功率半…

undo log

从这篇「执行一条 SQL 查询语句,期间发生了什么? (opens new window)」中,我们知道了一条查询语句经历的过程,这属于「读」一条记录的过程,如下图: 那么,执行一条 update 语句,期间发…

桌面显示器PD芯片:引领桌面显示技术的新篇章

随着科技的飞速发展,桌面显示器作为人们日常工作与生活中不可或缺的重要设备,其性能与品质也在不断提升。其中,PD芯片作为桌面显示器中的核心组件,发挥着至关重要的作用。本文将对桌面显示器PD芯片进行详细介绍,探讨其…

MD5源码(C语言描述)

本文介绍MD5源码(C语言描述)。 MD5(Message-Digest Algorithm 5),即消息摘要算法5,是一种被广泛使用的消息散列算法。散列算法的基础原理是:将数据(如一段文字)经过运算转换为一段固定长度&…

#Linux(VMwareTOOL安装)

(一)发行版:Ubuntu16.04.7 (二)记录: (1) (2)打开虚拟机然后安装,出现灰色可能是已经安装过但是自己没有找到 (3)删除VM…

流畅切换Linux的应用程序

流畅切换Linux的应用程序 流畅切换Linux的应用程序一.Linux启动一个程序在后台执行1. 使用nohup和&:2. 使用ctrlZ:3.使用screen:3.1 创建会话3.2 要重新连接到此会话:3.3 中途退出会话,但程序继续运行:3.4 结束一个…

STM32的简单介绍

STM32是一种基于ARM Cortex-M内核的32位微控制器,由意法半导体公司开发和生产。STM32具有丰富的外设和功能,适用于各种应用场合,如工业控制、消费电子、物联网、人机交互等。STM32的优势包括低功耗、高性能、高可靠性、易于开发等。STM32的系…

上海晋名室外暂存柜助力新技术皮革制品生产行业安全

本周上海晋名又有一台室外危化品暂存柜项目通过验收,此次项目主要用于新技术皮革制品生产行业油桶、化学品等物资的室外暂存安全。 用户单位创立于2004年,是一家从事新技术皮革制品加工、生产的外资企业。 上海晋名作为一家专注工业安全防护领域&#…

基于消失点的相机自标定

基于消失点的相机自标定 附赠最强自动驾驶学习资料:直达链接 相机是通过透视投影变换来将3D场景转换为2D图像。在射影变换中,平行线相交于一点称之为消失点。本文详细介绍了两种利用消失点特性的标定方法。目的是为根据实际应用和初始条件选择合适的标…

SpingBoot集成Rabbitmq及Docker部署

文章目录 介绍RabbitMQ的特点Rabbitmq术语消息发布接收流程 Docker部署管理界面说明Overview: 这个页面显示了RabbitMQ服务器的一般信息,例如集群节点的名字、状态、运行时间等。Connections: 在这里,可以查看、管理和关闭当前所有的TCP连接。Channels: …

component-右侧抽屉组件

1.右侧抽屉组件 点击筛选&#xff0c;右侧抽屉滑出&#xff0c;点击取消或者点击空白处抽屉收起。 2.代码 <template><div class"all" click"hidden()"><!-- 抽屉 --><div class"drawer"><div class"drawerBo…

js处理数组分类

const obj [{"groupingType": "1","remark": "梨花带雨","totalRmbMoney": 7,"kyeGroupingType": "广州一组"},{"groupingType": "2","remark": "99","…

【蓝桥杯】第15届蓝桥杯青少组stema选拔赛C++中高级真题答案(20240310)

一、选择题 第 1 题 第 2 题 表达式1000/3的结果是( A )。 A.333 B.333.3 C.334 D.333.0 第 3 题 下列选项中&#xff0c;判断a等于1并且b等于1正确的表达式是( B )。 A.!((a!1)&&(b!1)) B.!((a!1)||(b!1)) C.!(a1)&&(b1) D.(a1)&&(b1) 【解析】 A…

测试用例设计指南

软件测试设计是测试过程中重要的测试活动&#xff0c;怎么样设计测试用例能提高我们测试的效率和质量&#xff0c;从以下几个方面做了简单的讲解。 1 测试用例设计原则 测试用例设计的基本原则包括&#xff1a;有效性、清晰性、可复用性、可维护性、完整性、兼容性、易操作性…

【数据可视化】Echarts官方文档及常用组件

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 前言2. Echarts官方文档介绍3. ECharts基础架构及常用术语3.1 ECharts的基础架构3.2 ECharts的常用术语3.2.1 ECharts的基本名词3.2.2 ECharts的图表名词 4. 直角坐标系下的网格及坐标轴4.1 直角坐标系下的网格4.2…

360企业安全浏览器兼容模式显示异常某个内容不显示 偶发现象 本地无法复现情况js

360企业安全浏览器兼容模式显示异常 &#xff0c;现象测试环境频发 &#xff0c;本地连测试无法复现&#xff0c;线上反馈问题。 出现问题的电脑为windows且使用360企业安全浏览器打开兼容模式可复现 复现过程&#xff1a; 不直接点击超链接跳转页面 &#xff0c;登录后直接通…

vue3+threejs新手从零开发卡牌游戏(三):尝试在场景中绘制一张卡牌

首先我们思考下&#xff0c;一张最简单的卡牌有哪些东西构成&#xff1a;卡牌样式和卡牌数据。一张卡牌有正面和背面&#xff0c;有名称、属性、种族、攻击力等数据&#xff0c;我们先不考虑数据&#xff0c;先尝试在场景中绘制一张卡牌出来。 一、寻找卡牌素材 为了简单我直…

【考研数学】如何打牢基础?刷1800/1000/880/660还是教材?

如果想要用课后题来复习的话&#xff0c;可以从网上找一份复习题单来对照着做&#xff0c;这样可以把一些非重点内容忽略过去&#xff0c;提高我们复习的效率。 如果备考考研数学的话&#xff0c;专门的练习册更好一些。因为课后习题同类型的题目比较少&#xff0c;对于总结能…

持续领跑!腾讯云NDR再获Gartner®认可

近日&#xff0c;国际研究机构Gartner发布《Competitive Landscape&#xff1a;Network Detection and Response》&#xff08;以下简称“报告”&#xff09;&#xff0c;腾讯被列为NDR案例厂商&#xff08;NDR for SaaS and Cloud Identity Applications&#xff09;。 腾讯云…

需求:JSON数据显示null值或者不显示null值

使用hutool的工具类 import cn.hutool.json.JSON; import cn.hutool.json.JSONConfig; import cn.hutool.json.JSONUtil;public class Main {public static void main(String[] args) {String sss "{\"1\":\"a\",\"2\":null}";// 不…