六、Selenium操作指南(三)

news2024/11/13 21:59:57

文章目录

  • 七、模拟鼠标操作
    • (一)左键 click()
    • (二)右键 context_click()
    • (三)双击 double_click()
    • (四)拖拽 drag_and_drop(source,target)
    • (五)悬停 move_to_element()
  • 八、模拟键盘操作
    • (一)send_keys
  • 九、延时等待
    • (一)强制等待
    • (二)隐式等待
    • (三)显式等待
    • (四)WebDriverWait的参数说明

七、模拟鼠标操作

既然是模拟浏览器操作,自然也就需要能模拟鼠标的一些操作了,这里需要导入ActionChains 类。

(一)左键 click()

这个其实就是页面交互操作中的点击click()操作。

(二)右键 context_click()

from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
import time  
 
browser = webdriver.Chrome()
browser.get(r'https://www.baidu.com')  
time.sleep(2)
 
# 定位到要右击的元素,这里选的新闻链接
right_click = browser.find_element_by_link_text('新闻')
 
# 执行鼠标右键操作
ActionChains(browser).context_click(right_click).perform()
time.sleep(2)
 
# 关闭浏览器
browser.close()
ActionChains(browser):调用ActionChains()类,并将浏览器驱动browser作为参数传入
context_click(right_click):模拟鼠标双击,需要传入指定元素定位作为参数
perform():执行ActionChains()中储存的所有操作,可以看做是执行之前一系列的操作

(三)双击 double_click()

from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
import time  
 
browser = webdriver.Chrome()
browser.get(r'https://www.baidu.com')  
time.sleep(2)
 
# 定位到要双击的元素
double_click = browser.find_element_by_css_selector('#bottom_layer > div > p:nth-child(8) > span')
 
# 双击
ActionChains(browser).double_click(double_click).perform()
time.sleep(15)
 
# 关闭浏览器
browser.close()

(四)拖拽 drag_and_drop(source,target)

开始位置和结束位置需要被指定,这个常用于滑块类验证码的操作之类。

from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
import time  
 
browser = webdriver.Chrome()
url = 'https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
browser.get(url)  
time.sleep(2)
 
browser.switch_to.frame('iframeResult')
 
# 开始位置
source = browser.find_element_by_css_selector("#draggable")
 
# 结束位置
target = browser.find_element_by_css_selector("#droppable")
 
# 执行元素的拖放操作
actions = ActionChains(browser)
actions.drag_and_drop(source, target)
actions.perform()
# 拖拽
time.sleep(15)
 
# 关闭浏览器
browser.close()

(五)悬停 move_to_element()

from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
import time  
 
browser = webdriver.Chrome()
url = 'https://www.baidu.com'
browser.get(url)  
time.sleep(2)
 
# 定位悬停的位置
move = browser.find_element_by_css_selector("#form > span.bg.s_ipt_wr.new-pmd.quickdelete-wrap > span.soutu-btn")
 
# 悬停操作
ActionChains(browser).move_to_element(move).perform()
time.sleep(5)
 
# 关闭浏览器
browser.close()

在这里插入图片描述

八、模拟键盘操作

selenium中的Keys()类提供了大部分的键盘操作方法,通过send_keys()方法来模拟键盘上的按键。
引入Keys类:

from selenium.webdriver.common.keys import Keys
send_keys(Keys.BACK_SPACE):删除键(BackSpace)

send_keys(Keys.SPACE):空格键(Space)

send_keys(Keys.TAB):制表键(TAB)

send_keys(Keys.ESCAPE):回退键(ESCAPE)

send_keys(Keys.ENTER):回车键(ENTER)

send_keys(Keys.CONTRL,'a'):全选(Ctrl+A)

send_keys(Keys.CONTRL,'c'):复制(Ctrl+C)

send_keys(Keys.CONTRL,'x'):剪切(Ctrl+X)

send_keys(Keys.CONTRL,'v'):粘贴(Ctrl+V)

send_keys(Keys.F1):键盘F1

.....

send_keys(Keys.F12):键盘F12

(一)send_keys

from selenium.webdriver.common.keys import Keys
from selenium import webdriver
import time
 
browser = webdriver.Chrome()
url = 'https://www.baidu.com'
browser.get(url)  
time.sleep(2)
 
# 定位搜索框
input = browser.find_element_by_class_name('s_ipt')
# 输入python
input.send_keys('python')
time.sleep(2)
 
# 回车
input.send_keys(Keys.ENTER)
time.sleep(5)
 
# 关闭浏览器
browser.close()

九、延时等待

如果遇到使用ajax加载的网页,页面元素可能不是同时加载出来的,这个时候尝试在get方法执行完成时获取网页源代码可能并非浏览器完全加载完成的页面。所以,这种情况下需要设置延时等待一定时间,确保全部节点都加载出来。
三种方式可以来玩玩:强制等待、隐式等待和显式等待。

(一)强制等待

就很简单了,直接time.sleep(n)强制等待n秒,在执行get方法之后执行。

(二)隐式等待

implicitly_wait()设置等待时间,如果到时间有元素节点没有加载出来,就会抛出异常。

from selenium import webdriver
 
browser = webdriver.Chrome()
 
# 隐式等待,等待时间10秒
browser.implicitly_wait(10)  
 
browser.get('https://www.baidu.com')
print(browser.current_url)
print(browser.title)
 
# 关闭浏览器
browser.close()

(三)显式等待

设置一个等待时间和一个条件,在规定时间内,每隔一段时间查看下条件是否成立,如果成立那么程序就继续执行,否则就抛出一个超时异常。

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time
 
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
# 设置等待时间10s
wait = WebDriverWait(browser, 10)
# 设置判断条件:等待id='kw'的元素加载完成
input = wait.until(EC.presence_of_element_located((By.ID, 'kw')))
# 在关键词输入:关键词
input.send_keys('Python')
 
# 关闭浏览器
time.sleep(2)
browser.close()

(四)WebDriverWait的参数说明

WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

driver: 浏览器驱动

timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间)

poll_frequency: 每次检测的间隔时间,默认是0.5秒

ignored_exceptions:超时后的异常信息,默认情况下抛出NoSuchElementException异常

until(method,message='')

method: 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False

message: 如果超时,抛出TimeoutException,将message传入异常

until_not(method,message='')

until_not 与until相反,until是当某元素出现或什么条件成立则继续执行,until_not是当某元素消失或什么条件不成立则继续执行,参数也相同。

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

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

相关文章

python-禁止抽烟

题目描述 小理的朋友有 n 根烟,他每吸完一根烟就把烟蒂保存起来,k( k>1)个烟蒂可以换一个新的烟,那么小理的朋友最终能吸到多少根烟呢? 与某些脑筋急转弯不同的是,小理的朋友并不能从异次元借…

AI 通过python脚本自动化导出交易软件某一天的分笔成交明细

一.背景需求 打开交易软件,我们想要导出非今日的日线股票成交分笔明细,其实,很麻烦的。你得在日线图上点击某一天的柱状图,然后双击,就会出现当日的成交明细,然后导出。如果你想到导出30天或者1年的数据呢?你难道盯着电脑一步一步的操作?不,我不允许你还不知道用pytho…

应急响应-爆破漏洞应急响应流程(以SSH爆破为例)

目录 概述研判分析登录成功登录失败历史命令authorized_keys 定损止损攻击链路还原清理恢复总结复盘参考 概述 爆破漏洞是比较常见漏洞,端口开放,管理后台没有做登录频率限制等情况都可能遭受到爆破攻击,本文以SSH爆破为例,介绍下…

【SpringCloud Alibaba】(十二)学习 Sleuth + ZipKin

目录 1、ZipKin 核心架构1.1、ZipKin 概述1.2、ZipKin 核心架构 2、集成 ZipKin2.1、下载安装 ZipKin 服务端2.2、集成 ZipKin 客户端 3、ZipKin 数据持久化3.1、ZipKin 数据持久化到 MySQL 在前面整合 Sleuth 实现链路追踪时,我们是通过查看日志的情况来了解系统调…

【书生大模型实战营】进阶岛 第2关 Lagent 自定义你的 Agent 智能体

文章目录 【书生大模型实战营】进阶岛 第2关 Lagent 自定义你的 Agent 智能体学习任务Lagent 介绍环境配置Lagent Web Demo 使用基于 Lagent 自定义智能体 【书生大模型实战营】进阶岛 第2关 Lagent 自定义你的 Agent 智能体 学习任务 使用 Lagent 自定义一个智能体&#xff…

Nginx: 负载均衡基础配置, 加权轮序, hash算法, ip_hash算法, least_conn算法

负载均衡 在真正的反向代理场景中,必然涉及到的一个概念,就是负载均衡所谓负载均衡,也就是将Nginx的请求发送给后端的多台应用程序服务器通常的应用程序服务器,后面的每台服务器都是一个同等的角色,提供相同的功能 用…

阿里巴巴发布 Qwen2-VL 人工智能模型,具备先进的视频分析和推理能力

中国阿里巴巴集团的云计算部门阿里云周四宣布推出一款名为 Qwen2-VL 的新型人工智能模型,该模型具有高级视觉理解能力和多语言对话能力。 该公司在 Qwen-VL 人工智能模型的基础上,历时一年研发出了新模型,并表示它可以实现对长度超过 20 分钟…

easy_spring_boot Java 后端开发框架

Easy SpringBoot 基于 Java 17、SpringBoot 3.3.2 开发的后端框架,集成 MyBits-Plus、SpringDoc、SpringSecurity 等插件,旨在提供一个高效、易用的后端开发环境。该框架通过清晰的目录结构和模块化设计,帮助开发者快速构建和部署后端服务。…

基于Java+SpringBoot+Vue的学生评奖评优管理系统的设计与实现

基于JavaSpringBootVue的学生评奖评优管理系统的设计与实现 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅 某信 gzh 搜索【智…

CGAL 2D Polygons

CGAL 2D Polygons 简单概述 CGAL 2D Polygons使用。 简述 2D Polygon多边形是由一条封闭的边链表组成。对于多边形的操作有若干种常见的算法,有些算法要求多边形是简单多边形。如果边不相交,则多边形为简单多边形,除非连续的边相交于它们的…

django外键表查询存储删除

查询 之前用get 现在用filter,get返回对象,filter返回列表django model的get和filter方法的区别_django模型objects.get-CSDN博客 存储 删除

[001-07-001].Redis中的BigKey使用分析

1、常见面试题: 1.阿里的广告平台,海量数据里面查询某一固定前缀的key2.小红书,如何在生产限制keys*/flushdb/flushall等危险命令以防止误删除误使用3.美团,MEMORU USAGE命令你使用过吗4.Bikey问题,多大算big&#xf…

Spring之配置类解析源码解析

解析配置类 解析配置类流程图:https://www.processon.com/view/link/5f9512d5e401fd06fda0b2dd 解析配置类思维脑图:https://www.processon.com/view/link/614c83cae0b34d7b342f6d14 在启动Spring时,需要传入一个AppConfig.class给Appli…

VMware安装Ubuntu Linux Server操作系统

本文主要描述在VMware虚拟机上安装Ubuntu Linux Server操作系统,本版本集成kubernetes云原生对应的microk8s组件。 如上所示,从Ubuntu官方网站上下载Ubuntu服务器版本的安装文件 如上所示,在VMware上新建虚拟机,指定已下载的Ubunt…

基于yolov5的明厨亮灶阳光厨房老鼠检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv5的明厨亮灶阳光厨房老鼠检测系统是一种高效、智能的食品安全监测解决方案。该系统利用YOLOv5网络模型,结合深度学习技术,实现对厨房环境的实时监控与智能分析。 YOLOv5以其高速和高精度的特性,在实时目标检测任务中…

chapter09-OOP高级部分——(内部类)——day13

413-四种内部类 414-局部内部类1 记住: (1)局部内部类定义在方法中/代码块(2)作用域在方法体或者代码块中(3)本质仍然是一个类 415-局部内部类2 416-匿名内部类本质 匿名内部类只能用一次,并实例化了一个tiger对象, tiger指向它的对象,tig…

18043 找出3个数中最大的数

### 思路 1. 从键盘输入三个整数&#xff0c;使用空格分隔。 2. 比较三个整数&#xff0c;找出其中最大的数。 3. 输出最大的数。 ### 伪代码 1. 读取输入的三个整数。 2. 比较三个整数&#xff0c;找出最大的数。 3. 输出最大的数。 ### C代码 #include <iostream>…

Python编码系列—Python调试秘籍:pdb调试工具的实战应用

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

《神话:悟空》的破晓之路:文化深度与技术巅峰的交响乐章

在八月的炽热中&#xff0c;《黑神话&#xff1a;悟空》如同一道璀璨的光芒&#xff0c;划破了国产游戏的寂静夜空&#xff0c;不仅以其惊人的销量速度震撼了业界&#xff0c;更以其深厚的文化底蕴与顶尖的游戏设计&#xff0c;在全球玩家心中留下了不可磨灭的印记。这款游戏的…

Masonry的入门学习

Masonry的学习 文章目录 Masonry的学习前言使用MasonryMasonry支持的属性修饰语基础APIAuto Boxing中心点设置边距优先级创建约束更新约束使用Masonry来布局UIScrollview 小结 前言 在日常的开发中&#xff0c;我们如果面对一些很复杂的UI布局&#xff0c;我们如果统一使用fram…