【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.mzph.cn/news/763252.shtml

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

相关文章

vmare17 安装不可启动的iso镜像系统

由于要测试一个软件,要安装一个Windows11_InsiderPreview_Client_x64_zh-cn_26058.iso 于是在虚拟机里捣鼓一下。但是这个iso好像不能直接启动 这样就无法直接安装了,怎么办呢,可以先用个pe系统引导进去,再在PE系统里安装这个iso…

【免费】如何考取《鲸鸿动能广告初级优化师》认证(详细教程)

鲸鸿动能广告初级优化师认证考试PC网址 初级:鲸鸿动能广告初级优化师认证-华为开发者学堂 (huawei.com) 注:免费认证,里面包含免费的课程,浏览器用Edge。 文章目录 鲸鸿动能广告初级优化师认证考试网址 前言 一、备考流程 二…

软考 网络工程师 每日学习打卡 2024/3/21

学习内容 第8章 网络安全 本章主要讲解网络安全方面的基础知识和应用技术。针对考试应该掌握诸如数据加密、报文认 证、数字签名等基本理论,在此基础上深入理解网络安全协议的工作原理,并能够针对具体的 网络系统设计和实现简单的安全解决方案。 本章共有…

python云上水果超市的设计与实现flask-django-php-nodejs

伴随着我国社会的发展,人民生活质量日益提高。于是对云上水果超市进行规范而严格是十分有必要的,所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套云上水果超市,帮助商家进行商品信…

如何为您的网站压缩图像

今天碰到一个客户反馈,他在hostease购买了虚拟主机,创建的WordPress站点图片比较多,后来访问网站,页面上大量的图片加载时间较长,咨询网站图像如何压缩。我们为用户提供网站图像压缩,用户很快完成了设置。在…

【Pt】新建项目时的设置

新建项目时需要在如下界面做一些设置。 一、模板与文件 模板通常选择“PBR - Metallic Roughness Alpha-blend” 文件可以选择fbx,abc,obj等格式的三维模型文件 二、项目设置 2.1 文件分辨率 指的是在软件中的预览效果,分辨率越高预览效果…

使用npm创建一个全局的cli命令,就像vue-cli一样

我们用过vue-cli等工具包,全局安装之后,我们可以直接使用vue create等命令,实际上能够这样使用的原因,就是使用了package.json里面的bin字段注册命令。接下来就以一个脚本文件为例子为大家演示一下bin是如何发挥作用的。 创建项目…

跳过mysql权限验证来修改密码-GPT纯享版

1.打开 MySQL 的配置文件,通常是 my.ini 或 my.cnf。 2.找到 [mysqld] 部分,如果没有则添加。 3.在 [mysqld] 部分中添加一行:skip-grant-tables,这个选项告诉 MySQL 服务器跳过权限验证,允许任何用户连接而不需要密码…

java数据结构与算法基础-----排序------堆排序

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 文章目录 堆排序是利用堆(数据结构)设计的排序算法…

基于SSM+Jsp+Mysql的KTV点歌系统

基于SSMJspMysql的KTV点歌系统 基于SSMJspMysql的KTV点歌系统的设计与实现 开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工…

SRC中的一些信息收集姿势

前言 前前后后挖了四个月的EDUSRC,顺利从路人甲升到了网络安全专家,从提交的内容来看大部分还是以中低危为主,主打的就是弱口令和未授权。 在这过程中还是比较浮躁的,因此接下来的时间还是要好好沉淀一下自身的技术,学…

undo log

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

vue3 报错 require is not defined

问题 require is not defined 原因 vite 不支持require的用法, webpack是支持的 解决 方法一: 更改vite使用语法 vite官网 方法二 安装转换插件vite-plugin-require-transform 仓库地址 参考 关于Vite不能使用require问题 方法二Vite 踩坑 —— …

鸿蒙开发-UI-动画-页面间动画

鸿蒙开发-UI-组件导航-Navigation 鸿蒙开发-UI-组件导航-Tabs 鸿蒙开发-UI-图形-图片 鸿蒙开发-UI-图形-绘制几何图形 鸿蒙开发-UI-图形-绘制自定义图形 鸿蒙开发-UI-图形-页面内动画 鸿蒙开发-UI-图形-组件内转场动画 鸿蒙开发-UI-图形-弹簧曲线动画 文章目录 前言 一、放大缩…

【TD3思路及代码】【自用笔记】

1 组成(Target Network Delayed Training) Actor网络:这个网络负责根据当前的状态输出动作值。在训练过程中,Actor网络会不断地学习和优化,以输出更合适的动作。Critic网络:TD3中有两个Critic网络&#xff…

自然拼读-26个字母发音

自然拼读-26个字母发音 26个字母 Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Kk Ll Mm Nn Oo Pp Qq Rr Ss Tt Uu Vv Ww Xx Yy Zz 元音和辅音 辅音 元音 单词 元音 Aa Ee Li Oo Uu 另外:Yy是半元音 辅音 Bb Cc Dd Ff Gg Hh Jj Kk Ll Mm Nn Pp Qq Rr Ss Tt Vv Ww X…

利用二分法求方程在某个范围内的根

问题描述: 利用二分法求方程在(-10,10)的根。 方法:先求出两端点的中点,然后将中点带入方程中检查是否等于0,如果等于0说明找到了根,如果大于0,说明根在左半部分,将rig…

Linux-网络层IP协议、链路层以太网协议解析

目录 网络层:IP协议地址管理路由选择 链路层 网络层: 网络层:负责地址管理与路由选择 — IP协议,地址管理,路由选择 IP协议 数据格式: 4位协议版本:4-ipv4协议版本 4位首部长度:以…

2024计算机二级Python 11和12

单向列表不能再回头,只有从头指针开始才可以,双向列表会出现重复访问,二叉树节点从根开始可以达到目的 面向对象的主要特征:抽象、封装、继承、多态 Python通过解释方式执行,执行速度没有采用编译方式的语言执行的快 f…

混合像元分解:Matlab如何帮助揭示地表组成?

光谱和图像是人们观察世界的两种方式,高光谱遥感通过“图谱合一”的技术创新将两者结合起来,大大提高了人们对客观世界的认知能力,本来在宽波段遥感中不可探测的物质,在高光谱遥感中能被探测。以高光谱遥感为核心,构建…