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,...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
