selenium官网文档阅读总结(day 2)

1.selenium元素定位方法

1.1selenium命令

当我们使用chormdriver打开网页后,接下来就要用python操作元素,模拟用户会作出的操作,这些操作元素的方法就是命令。比如

  (1)  click:点击(按钮,单选框,复选框)

(2)send_keys: 输入

  (3)text:获取文本

(4)get_attribute:获取属性

1.2selenium八大元素定位方式

通用语法:driver.findelement('定位方式','值')

注意:最好使用单引号,因为双引号涉及到字符转义的问题

推荐使用的两种方法是id和xpath,原因是id具有唯一性,但由于不是所有元素都有id,也推荐使用更具有通用性的xpath。

(1)xpath: xpath是一种在xml中定位元素的语言。因为html可以看作xml的一种实现,因此使用selenium也可以利用xpath获取元素。xpath的获取方法如图:

默认复制的xpath就已经兼容了id的定位,xpath=//form[@id='loginForm'] 就是定位了

id为loginFrom的元素。

   (2)LINK_TEST :等于a标签中出现的文本

(3)PARTIAL_ LINK_TEST:被包含于a标签中出现的文本

(4)class:只可用于class中不包含空格的情况,如果有空格该方法无法定位元素。可以用点代替空格值。

(5)CSS_SELECTOR:css使用选择器来为页面元素绑定属性。这些选择器可以被selenium用作另外的定位策略。

(6)ID:根据元素ID进行定位

(7)name:如果多个元素拥有相同的name属性,那么将定位第一个具有该name属性的元素。

(8)tag: 当网页有多个相同的tag标签,那么将定位第一个该tag名称的元素。

2.selenium验证码点击案例

采用第三方平台:超级鹰,注册一个账号,创建软件ID,购买一定量的提分,下载python的demo放在项目里,便于后续方法调用

实现功能:b站自动登录并点击验证码

​
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
#导入用于裁剪图片的库,通过pip install pillow命令下载这个库,pil是python常用的第三方图像处理库
from PIL import Image
from chaojiying import Chaojiying_Client
#导入动作链类
import time
#1.实例化对象后定位输入账号密码的标签,点击登录,弹出验证码并调用截图方法进行截图并保存
#打开浏览器
driver=webdriver.Chrome()
#打开网站(B站注册登录页网址)
driver.get('https://passport.bilibili.com/login?from_spm_id=333.337.top_bar.login_window')
driver.maximize_window()
#阻止页面自动关闭,2s
time.sleep(2)
#输入账号密码并进行登录
driver.find_element(By.XPATH,'//*[@id="app"]/div[2]/div[2]/div[3]/div[2]/div[1]/div[1]/input').send_keys('***0316')
driver.find_element(By.XPATH,'//*[@id="app"]/div[2]/div[2]/div[3]/div[2]/div[1]/div[3]/input').send_keys('***')
driver.find_element(By.XPATH,'//*[@id="app"]/div[2]/div[2]/div[3]/div[2]/div[2]/div[2]').click()
time.sleep(8)
#保存屏幕截图,传入的参数是自己命名的图片文件名
driver.save_screenshot('bili.png')
#2.声明一个变量保存并打点调用image库里面的open函数且传参为截图
data=Image.open('bili.png')
# 3.使用该对象打点调用crop方法并传入需裁剪区域的像素值然后链式调用save方法并保存裁剪好的图片
#crop传入的参数要一个括号括起来,具体的数值在图片预览里看自己电脑的像素坐标!!!
data.crop((1102,277,1736,990)).save('imag1.png')
#对接第三方,超级鹰网址,打码平台
#http://www.chaojiying.com/price.html
#4.第三方打码接口,需要自己注册账号密码,输入接口函数
zuobiao=Chaojiying_Client('***', '****','***')
im=open('imag1.png','rb').read()
#取索引值,9004是验证码类型
d=zuobiao.PostPic(im,9004)["pic_str"]
coordinate = [xy.split(sep=',') for xy in d.split(sep='|')]
print('解析验证码成功!坐标为:', coordinate)  #[['339', '576'], ['235', '390'], ['325', '311']]
# 遍历坐标列表,使用动作链点击列表中每个坐标,达到点击验证码的目的
for xy in coordinate:x = int(xy[0])y = int(xy[1])action=ActionChains(driver)photo=driver.find_element(By.XPATH,'/html/body/div[4]/div[2]/div[6]/div/div/div[2]/div[1]/div/div[2]/img')time.sleep(0.5)# action.move_to_element_with_offset(photo,x-13,y-101).click().perform()#x,y轴的求法 (打码平台返回值-裁剪后照片空白处)*网页上定位的验证码画布X轴数值除以被裁剪下的画布X轴数值action.move_to_element_with_offset(photo,-135+(x-15)*0.48,-140+(y-100)*0.48).click().perform()
driver.find_element(By.XPATH,'/html/body/div[4]/div[2]/div[6]/div/div/div[3]/a/div').click()
#关闭浏览器
driver.close()​

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

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

相关文章

【Java】UWB高精度工业人员安全定位系统源码

基于VueSpring boot前后端分离架构开发的一套UWB技术高精度定位系统源码。 UWB高精度人员定位系统提供实时定位、电子围栏、轨迹回放等基础功能以及各种拓展功能,用户可根据实际需要任意选择搭配拓展功能。该系统简易部署,方便使用,实时响应。UWB高精度定…

skywalking全链路追踪

文章目录 一、介绍二、全链路追踪1. 测试1 - 正常请求2. 测试2 - 异常请求 三、过滤非业务请求链路1. 链路忽略插件2. 配置3. 测试 一、介绍 在上一篇文章skywalking安装教程中我们介绍了skywalking的作用以及如何将其集成到我们的微服务项目中。本篇文章我们介绍在微服务架构…

张量Tensor 深度学习

1 张量的定义 张量tensor理论是数学的一个分支学科,在力学中有重要的应用。张量这一术语源于力学,最初是用来表示弹性介质中各点应力状态的,后来张量理论发展成为力学和物理学的一个有力数学工具。 张量(Tensor)是一个…

基于总线加锁和缓存锁(CPU实现原子操作的两种方式)

总线锁 总线锁就是使用处理器提供的一个LOCK#信号,当一个处理器在总线上输出此信号时,其他处理器的请求将被阻塞住,那么该处理器可以独占共享内存。 CPU和内存之间的通信被锁!! 如果多个处理器同时对共享变量进行读写…

解决一个Sqoop抽数慢的问题,yarn的ATSv2嵌入式HBASE崩溃引起

新搭建的一个Hadoop环境,用Sqoop批量抽数的时候发现特别慢,我们正常情况下是一个表一分钟左右,批量抽十几个表,也就是10分钟的样子,结果发现用了2个小时: 查看yarn日志 发现有如下情况: 主要有两…

【java安全】原生反序列化利用链JDK7u21

文章目录 【java安全】原生反序列化利用链JDK7u21前言原理equalsImpl()如何调用equalsImpl()?HashSet通过反序列化间接执行equals()方法如何使hash相等? 思路整理POCGadget为什么在HashSet#add()前要将HashMap的value设为其他值? 【java安全】…

C++二叉搜索树剖析

目录 🍇二叉搜索树概念🍈二叉搜索树查找🍉二叉搜索树的插入🍊二叉搜索树的删除🍍二叉搜索树的查找、插入、删除实现🍋二叉搜索树的应用🥭二叉搜索树的性能分析🍓总结 🍇二…

爬虫教程1_Xpath 入门教程

Xpath 入门教程 在编写爬虫程序的过程中提取信息是非常重要的环节,但是有时使用正则表达式无法匹配到想要的信息,或者书写起来非常麻烦,此时就需要用另外一种数据解析方法,也就是本节要介绍的 Xpath 表达式。 Xpath表达式 XPath…

Java版工程行业管理系统源码-专业的工程管理软件- 工程项目各模块及其功能点清单 em

​ Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目…

【Linux 网络】 传输层协议之TCP协议 TCP的三次握手和四次挥手

TCP协议 TCP协议段格式谈谈什么是 “可靠” 和 “不可靠”TCP协议段——序号与确认序号TCP协议段——窗口大小TCP协议段 —— 六个标志位确认应答机制(ACK)超时重传机制连接管理机制TCP 的三次握手四次挥手TCP三次握手四次挥手总结图 滑动窗口流量控制拥…

【Spring Cloud 三】Eureka服务注册与服务发现

系列文章目录 【Spring Cloud一】微服务基本知识 Eureka服务注册与服务发现 系列文章目录前言一、什么是Eureka?二、为什么要有服务注册发现中心?三、Eureka的特性四、搭建Eureka单机版4.1Eureka服务端项目代码pom文件配置文件启动类启动项目查看效果 E…

docker配置远程连接端口

配置docker 配置远程连接端口 vi /lib/systemd/system/docker.servicesystemctl daemon-reload && systemctl restart docker firewall-cmd --zonepublic --add-port2375/tcp --permanenthttp://node2:2375/version

Node.js之express框架学习心得

Node.js:颠覆传统的服务器端开发 Node.js是基于Chrome V8引擎构建的JavaScript运行时,它采用了完全不同的开发模型。Node.js使用事件驱动和非阻塞I/O的方式处理请求,通过单线程和异步机制,实现高效的并发处理。这意味着在Node.js中…

【每日易题】数据结构链表篇——单链表oj题(1),几道典型例题带你快速掌握单链表

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,米娜桑们,这里是君兮_,今天来填一个埋了好久的坑,在暑假之前就预告过这个系列,但由于各种原因(主要是有点懒)今天才开坑。我们这个系列主要是…

1310. 数三角形

题目链接:https://www.acwing.com/problem/content/1312/ 首先不考虑三点共线的情况一共有 种,现在来计算三点共线的情况 1.三点在一条直线上 2.三点在一条竖线上 3.三点在一条斜线上,正反斜线对称,仅需考虑一边的情况 如果…

视频汇聚平台EasyCVR视频广场侧边栏支持拖拽

为了提升用户体验以及让平台的操作更加符合用户使用习惯,我们在EasyCVR v3.3版本中,支持面包屑侧边栏的广场视频、分组列表、收藏这三个模块拖拽排序,并且该操作在视频广场、视频调阅、电子地图、录像回放等页面均能支持。 TSINGSEE青犀视频…

服务器运行python程序的使用说明

服务器的使用与说明 文章目录 服务器的使用与说明1.登录2.Python的使用2.1 服务器已安装python32.2 往自己的用户目录安装python31.首先下载安装包2.解压缩3.编译与安装 2.3 新建环境变量2.4 测试 3 创建PBS作业并提交 1.登录 windowsr打开运行命令窗口,在运行框中…

【万字长文】SpringBoot整合Atomikos实现多数据源分布式事务(提供Gitee源码)

前言:在最近的实际开发的过程中,遇到了在多数据源的情况下要保证原子性的问题,这个问题当时遇到了也是思考了一段时间,后来通过搜集大量资料与学习,最后是采用了分布式事务来解决这个问题,在讲解之前&#…

puppeteer监听response并封装为express服务调用

const express require(express); const puppeteer require(puppeteer); const app express(); let browser; // 声明一个全局变量来存储浏览器实例app.get(/getInfo, async (req, res) > {try {const page_param req.query.page; // 获取名为"page"的查询参数…

接口测试之文件上传

在日常工作中,经常有上传文件功能的测试场景,因此,本文介绍两种主流编写上传文件接口测试脚本的方法。 首先,要知道文件上传的一般原理:客户端根据文件路径读取文件内容,将文件内容转换成二进制文件流的格式…