【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,一经查实,立即删除!

相关文章

vue中v-if和v-show的区别

手段:v-if是动态的向DOM树内添加或者删除DOM元素;v-show是通过设置DOM元素的display样式属性控制显隐;编译过程:v-if切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件;v-s…

ARM IHI0069F GIC architecture specification (3)

1.2 术语 本手册中的架构描述使用与 Armv8 架构相同的术语。 有关此术语的更多信息,请参阅 Arm 架构参考手册 Armv8 A 部分的介绍,了解 Armv8-A 架构配置文件。 此外,在适当的情况下使用 AArch64 系统寄存器名称,而不是同时列出 A…

位运算算法

文章目录 预备知识判断字符是否唯⼀丢失的数字两整数之和只出现⼀次的数字只出现⼀次的数字II消失的两个数字 预备知识 给一个数n,确定它的二进制表示中的第x位是0还是1 (n>>(x-1)) & 1 1 true是1,false是0 将一个数n的二进制表示的第x位修改成1 n | (1<<(x-1…

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

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

实验4 词向量训练

必做题: 数据准备:数据集包含100个文件,每个文件里面有多个从维基百科上爬取的内容,每一条以字典形式保存,分为id,url,title,text四个字段,使用text字段的文本训练词向量。读取‘text’字段的文本,并使用jieba进行分词。使用Gensim工具训练词向量,训练方法为Skip-gr…

【链表】Leetcode 23. 合并 K 个升序链表【困难】

合并 K 个升序链表 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 示例 1&#xff1a; 输入&#xff1a;lists [[1,4,5],[1,3,4],[2,6]] 输出&#xff1a;[1,1,2,3,4,4,5,6] 解释&#xff1…

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

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

元素和节点

节点操作和事件 今日目标&#xff1a; 节点的概念和分类 节点的创建&#xff0c;插入&#xff0c;替换&#xff0c;删除操作 事件三要素 常用事件类型 0.回顾 # 1. 获取元素的尺寸 offset一套 dom.offsetWidth: 内容 内边距 边框 dom.offsetHeightclient一套 dom.clie…

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

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

C语言经典例题(5) --- 交换数组、统计二进制、交换变量、菱形、字符串左旋

文章目录 1.交换数组2.统计二进制中1的个数3.交换两个变量(不创建临时变量)4.打印菱形5.字符串左旋 1.交换数组 将数组A中的内容和数组B中的内容进行交换。(数组大小一样) #include <stdio.h>void swap(int arr1[],int arr2[], int sz) {int tmp 0;for (int i 0;i &l…

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

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

如何为您的网站压缩图像

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

【Pt】新建项目时的设置

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

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

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

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

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

OpenCV基于阈值的分割技术详细介绍

OpenCV 提供了基于阈值的分割技术&#xff0c;这是一种简单且常用的图像分割方法&#xff0c;其基本思想是根据像素的灰度值将图像分为不同的区域。下面详细介绍了 OpenCV 中基于阈值的分割技术&#xff1a; 全局阈值分割&#xff08;Global Thresholding&#xff09;&#xff…

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

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

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

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

SRC中的一些信息收集姿势

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

undo log

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