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()
相关文章:
selenium官网文档阅读总结(day 2)
1.selenium元素定位方法 1.1selenium命令 当我们使用chormdriver打开网页后,接下来就要用python操作元素,模拟用户会作出的操作,这些操作元素的方法就是命令。比如 (1) click:点击(按钮,单选框ÿ…...
VMware虚拟机安装VMware tools
一、挂载光驱 执行以下命令来创建 /mnt/cdrom 目录: mkdir -p /mnt/cdrom-p 参数会确保如果 /mnt/cdrom 的上级目录(例如 /mnt)不存在的话也会被创建。 然后,你可以再次尝试挂载光盘: mount /dev/sr0 /mnt/cdrom这次…...
【Linux命令200例】rm用来删除文件或目录(谨慎使用)
🏆作者简介,黑夜开发者,全栈领域新星创作者✌,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆本文已收录于专栏:Linux命令大全。 🏆本专栏我们会通过具体的系统的命令讲解加上鲜…...
行云管家荣获CFS第十二届财经峰会 “2023产品科技创新奖”
7月26日至27日,CFS第十二届财经峰会暨2023可持续商业大会在京盛大召开。峰会主题为“激活高质量发展澎湃活力”,超1000位政商领袖、专家学者、企业及媒体代表出席了本次盛会,共同分享新技术新产品新趋势、研判全球新挑战与新变局下企业的机遇…...
uniapp禁止页面滚动
用 touchmove.stop.prevent“moveHandle”,moveHandle 可以用来处理 touchmove 的事件,也可以是一个空函数。 <viewclass“mask” touchmove.stop.prevent“moveHandle”>...
ModuleNotFoundError: No module named ‘_sqlite3‘
前言 遇到报错信息如下: ModuleNotFoundError: No module named _sqlite3解决方式 参考解决方式: https://blog.csdn.net/jaket5219999/article/details/53512071 find / -name _sqlite*.socp /usr/lib64/python3.6/lib-dynload/_sqlite3.cpython-36…...
Rust的入门篇(下)
这篇博客是rust入门篇下 45. 生命周期注释 // 生命周期// 下面代码不能通过编译 // longer 函数取 s1 和 s2 两个字符串切片中较长的一个返回其引用值 // 返回值引用可能会返回过期的引用 // fn longer(s1: &str, s2: &str) -> &str { // if s2.len() >…...
PYTHON-logging-工具类-支持中文字符控制台输出和文件写入-不会导致乱码
import logging import sys import os import time from logging.handlers import RotatingFileHandler import iodef get_logger(tag):# 创建一个新的输出流,并指定编码为UTF-8sys.stdout io.TextIOWrapper(sys.stdout.buffer, encodingutf-8)accPath logsif not…...
对gpt的简单认识
1.gpt是什么? GPT(Generative Pre-trained Transformer 生成式预训练Transformer模型)是一种基于Transformer架构的预训练语言模型,由OpenAI开发。GPT模型以无监督学习的方式使用大规模语料库进行预训练,并具有生成文…...
java类和对象详解(1)
面向对象的初步认知 什么是面向对象 Java是一门纯面向对象的语言(Object Oriented Program, 简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。 用面向对象的思想来涉及程序,更…...
RxJava 倒计时,轮询器
笔记 倒计时 /*** 短信倒计时** param s*/private Subscription subscription30;public void startCountdownFinishRx30(int s) {clearFinishSubscription30();subscription30 Observable.interval(0, 1, TimeUnit.SECONDS).take(s 1).map(new Func1<Long, Long>() {O…...
SE-Net注意力机制
📌本次任务:了解SE-Net原理 SE-Net 是 ImageNet 2017(ImageNet 收官赛)的冠军模型,是由WMW团队发布。具有复杂度低,参数少和计算量小的优点。且SENet 思路很简单,很容易扩展到已有网络结构如 Inception 和 ResNet 中。(这篇论文是2019年的,应该是后续做了更新) 一…...
【Lua学习笔记】Lua进阶——垃圾回收
按照唐老师的课程本来要讲自带库的,但是想想这东西能看文档,ctrl左键还能看注解,并且最重要的许多自带库的方法基本大部分语言都有,其实看看就能懂了。所以还是重点讲讲垃圾回收 文章目录 GC辅助垃圾回收collectgarbage增量模式分…...
session和cookie
cookie和session结合使用 web开发发展至今,cookie和session的使用已经出现了一些非常成熟的方案。在如今的市场或者企业里,一般有两种存储方式: 1、存储在服务端:通过cookie存储一个session_id,然后具体的数据则是保…...
P7243 最大公约数
题目 思路 利用曼哈顿原理求离(x,y)最远的点 代码 #include<bits/stdc.h> using namespace std; #define int long long #define INF 0x3f3f3f3f const int maxn2005; int gcd(int a,int b) { return b?gcd(b,a%b):a; } int n,m; i…...
ES6基础知识九:你是怎么理解ES6中Module的?使用场景?
一、介绍 模块,(Module),是能够单独命名并独立地完成一定功能的程序语句的集合(即程序代码和数据结构的集合体)。 两个基本的特征:外部特征和内部特征 外部特征是指模块跟外部环境联系的接口…...
TensorFlow项目练手(三)——基于GRU股票走势预测任务
项目介绍 项目基于GRU算法通过20天的股票序列来预测第21天的数据,有些项目也可以用LSTM算法,两者主要差别如下: LSTM算法:目前使用最多的时间序列算法,是一种特殊的RNN(循环神经网络)…...
微信小程序页面传值为对象[Object Object]详解
微信小程序页面传值为对象[Object Object]详解 1、先将传递的对象转化为JSON字符串拼接到url上2、在接受对象页面进行转译3、打印结果 1、先将传递的对象转化为JSON字符串拼接到url上 // info为对象 let stationInfo JSON.stringify(info) uni.navigateTo({url: /pages/statio…...
Redis篇
文章目录 Redis-使用场景1、缓存穿透2、缓存击穿3、缓存雪崩4、双写一致5、Redis持久化6、数据过期策略7、数据淘汰策略 Redis-分布式锁1、redis分布式锁,是如何实现的?2、redisson实现的分布式锁执行流程3、redisson实现的分布式锁-可重入4、redisson实…...
Entity Framework(EF)查询
一、In 查询 var list = dbContext.Users.Where(u => new int[] {1, 2, 3, 5,...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
