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,...
哔哩下载姬DownKyi完整指南:三步掌握B站8K视频下载
哔哩下载姬DownKyi完整指南:三步掌握B站8K视频下载 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等ÿ…...
如何用FCEUX重温经典游戏?全场景部署指南
如何用FCEUX重温经典游戏?全场景部署指南 【免费下载链接】fceux FCEUX, a NES Emulator 项目地址: https://gitcode.com/gh_mirrors/fc/fceux 为什么选择FCEUX模拟器?🎮 在众多NES模拟器中,FCEUX凭借三大核心优势脱颖而出…...
如何选择可靠的第三方软件测试机构,构建全生命周期的软件安全防线
在数字化转型的浪潮中,软件已成为企业运营的核心。然而,伴随其重要性一同增长的,是日益严峻的安全威胁。传统软件开发流程中,安全测试往往被置于交付前的独立环节,这种“事后补丁”的模式导致安全漏洞发现晚、修复成本…...
基于MATLAB的数字图像处理系统:预处理、特征提取与语义分割全流程实现
数字图像处理系统(基于matlab) 此系统包括预处理,特征提取,语义分割 使用机器学习算法knn和svm 预处理包括线性灰度级变化,指数灰度级变化,直方图均衡化,高斯滤波,中值滤波ÿ…...
STM32L152RE 32MHz时钟配置库:超低功耗MCU高频稳定启动方案
1. 项目概述ST_L152_32MHZ是一个专为 STMicroelectronics Nucleo-L152RE 开发板设计的轻量级时钟配置库,其核心目标是将系统主频(SYSCLK)从出厂默认的 32 kHz LSE 或 16 MHz HSI 稳定提升至32 MHz,并确保所有关键外设时钟…...
PyQt新手必看:Fluent Widgets vs PyQtGraph,哪个更适合你的GUI项目?
PyQt新手指南:Fluent Widgets与PyQtGraph的深度对比与选型策略 当你第一次踏入PyQt GUI开发的世界,面对琳琅满目的框架选择,是否感到迷茫?Fluent Widgets和PyQtGraph这两个名字可能已经出现在你的搜索列表中,但它们究竟…...
告别Python环境依赖!用PyInstaller打包Tkinter/Selenium程序的最佳实践
告别Python环境依赖!用PyInstaller打包Tkinter/Selenium程序的最佳实践 你是否遇到过这样的尴尬场景?精心开发的Python程序在本地运行完美,但分享给同事或客户时,对方却因为缺少Python环境或依赖库而无法使用。尤其当程序涉及图形…...
Avalonia跨平台开发踩坑记:我的第一个带最小化/关闭按钮的MVVM应用
Avalonia跨平台开发实战:从零构建MVVM窗口控制应用 第一次接触Avalonia时,我被它"一次编写,多平台运行"的承诺所吸引。作为一个长期使用WPF的开发者,跨平台桌面应用开发一直是个痛点。但当我真正开始用Avalonia实现一个…...
QGIS 3.28 保姆级配置指南:从中文界面到高德底图,手把手搞定智驾地图工作流
QGIS 3.28 智能驾驶地图工程师开箱指南:从零构建高精度工作流 刚拿到工牌的智能驾驶地图工程师小李,面对全新的QGIS界面有些手足无措。作为空间数据处理的核心工具,QGIS的配置直接决定了后续高精地图生产的效率与精度。本文将带你完成从软件…...
哲学家吃饭问题没搞懂?用Python模拟信号量帮你彻底理解进程同步(附可运行代码)
用Python动态模拟哲学家进餐问题:从死锁到解决方案的完整实践指南 在操作系统的学习中,哲学家进餐问题堪称进程同步与死锁的"经典案例"。这个看似简单的场景却蕴含着并发编程中最棘手的挑战——如何协调多个进程对有限资源的访问。本文将带你…...
