当前位置: 首页 > news >正文

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:点击(按钮,单选框&#xff…...

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”&#xff0c;moveHandle 可以用来处理 touchmove 的事件&#xff0c;也可以是一个空函数。 <viewclass“mask” touchmove.stop.prevent“moveHandle”>...

ModuleNotFoundError: No module named ‘_sqlite3‘

前言 遇到报错信息如下&#xff1a; ModuleNotFoundError: No module named _sqlite3解决方式 参考解决方式&#xff1a; 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):# 创建一个新的输出流&#xff0c;并指定编码为UTF-8sys.stdout io.TextIOWrapper(sys.stdout.buffer, encodingutf-8)accPath logsif not…...

对gpt的简单认识

1.gpt是什么&#xff1f; GPT&#xff08;Generative Pre-trained Transformer 生成式预训练Transformer模型&#xff09;是一种基于Transformer架构的预训练语言模型&#xff0c;由OpenAI开发。GPT模型以无监督学习的方式使用大规模语料库进行预训练&#xff0c;并具有生成文…...

java类和对象详解(1)

面向对象的初步认知 什么是面向对象 Java是一门纯面向对象的语言(Object Oriented Program, 简称OOP),在面向对象的世界里&#xff0c;一切皆为对象。面向对象是解决问题的一种思想&#xff0c;主要依靠对象之间的交互完成一件事情。 用面向对象的思想来涉及程序&#xff0c;更…...

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进阶——垃圾回收

按照唐老师的课程本来要讲自带库的&#xff0c;但是想想这东西能看文档&#xff0c;ctrl左键还能看注解&#xff0c;并且最重要的许多自带库的方法基本大部分语言都有&#xff0c;其实看看就能懂了。所以还是重点讲讲垃圾回收 文章目录 GC辅助垃圾回收collectgarbage增量模式分…...

session和cookie

cookie和session结合使用 web开发发展至今&#xff0c;cookie和session的使用已经出现了一些非常成熟的方案。在如今的市场或者企业里&#xff0c;一般有两种存储方式&#xff1a; 1、存储在服务端&#xff1a;通过cookie存储一个session_id&#xff0c;然后具体的数据则是保…...

P7243 最大公约数

题目 思路 利用曼哈顿原理求离&#xff08;x&#xff0c;y&#xff09;最远的点 代码 #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的?使用场景?

一、介绍 模块&#xff0c;&#xff08;Module&#xff09;&#xff0c;是能够单独命名并独立地完成一定功能的程序语句的集合&#xff08;即程序代码和数据结构的集合体&#xff09;。 两个基本的特征&#xff1a;外部特征和内部特征 外部特征是指模块跟外部环境联系的接口…...

TensorFlow项目练手(三)——基于GRU股票走势预测任务

项目介绍 项目基于GRU算法通过20天的股票序列来预测第21天的数据&#xff0c;有些项目也可以用LSTM算法&#xff0c;两者主要差别如下&#xff1a; LSTM算法&#xff1a;目前使用最多的时间序列算法&#xff0c;是一种特殊的RNN&#xff08;循环神经网络&#xff09;&#xf…...

微信小程序页面传值为对象[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分布式锁&#xff0c;是如何实现的&#xff1f;2、redisson实现的分布式锁执行流程3、redisson实现的分布式锁-可重入4、redisson实…...

Entity Framework(EF)查询

一、In 查询 var list = dbContext.Users.Where(u => new int[] {1, 2, 3, 5,...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...