Python爬虫如何通过滑块验证

news2024/11/15 21:22:03

一:定位元素的坐标

当 Selenium 定位到元素后,如果想获取元素在页面中的具体坐标位置,可以通过 element.location 的方式来得到元素的起始坐标字典(元素的左上顶点)。然后再通过 element.size 的方式来获取该元素的宽度和高度。
在页面中只要获取元素的起始坐标,再将元素的宽度和高度进行相加就可以得到元素的结束坐标位置,这样就能够在页面中定位该元素的完整坐标位置了。

"""
获取百度logo图片的左上角坐标,宽高,右下角的坐标
"""
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

# 创建浏览器对象(注意这个Chrome首字母大写)
driver = webdriver.Chrome()

# 发起请求
driver.get('https://www.baidu.com/')
time.sleep(1)

# 窗口最大化
driver.maximize_window()

# 定位到百度的logo
image_element = driver.find_element(By.ID, 's_lg_img')

# 获取左上角坐标
location = image_element.location # 结果是一个字典
print('百度logo图片左上角坐标:', location)

# 获取图片的宽高
img_size = image_element.size # 结果是一个字典
print('百度logo图片的宽高:', img_size)

# 获取图片右下角的坐标
# 右下角x轴: 左上角x轴 + 图片宽度
x = location['x'] + img_size['width']

# 右下角y轴:左上角y轴 + 图片高度
y = location['y'] + img_size['height']

print('百度logo图片右下角坐标:', x, y)

time.sleep(5)

二:滑动验证的解锁

验证码的分类
在登录账号的过程中很多网站都会对用户身份进行验证,也就是我们平常所看到的各种需要输入的验证操作等。

常见的验证方式如下:
点击按钮滑动解锁,拼图滑动解锁;
输入英文,数字,汉字的验证码;
点击图片,汉字,图标的点击验证;

在这里插入图片描述
动作链的介绍
滑动验证的操作是通过人类的行为来进行检查的方式。如果想通过程序来实现,就需要创建一个动作连来模拟人的行为。

动作链使用介绍
ActionChains创建动作链对象
click_and_hold点击并长按滑动块
move_by_offset滑动的目标位置
perform开始拖动滑动块
release松开选择的滑动块

测试网站:
https://www.helloweba.net/demo/2017/unlock/

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

# 创建一个浏览器对象
driver = webdriver.Chrome()

# 发送请求
driver.get('https://www.helloweba.net/demo/2017/unlock/')

# 1.定位滑动按钮
short_obj = driver.find_element(By.XPATH, '//div[@class="bar1bar"]/div[@class="slide-to-unlock-handle"]')

# 2.按住
# 创建一个动作链对象,参数就是浏览器对象
action_obj = webdriver.ActionChains(driver)

# 点击并且按住,参数就是定位的按钮
action_obj.click_and_hold(short_obj)

# 定位整条滑块
long_obj = driver.find_element(By.XPATH, '//div[@class="bar1bar"]/div[@class="slide-to-unlock-bg"]')

# 得到它的宽高
size = long_obj.size
width = size['width']

# 定位滑动坐标,其中width表示移动的宽度,0表示移动的高度,这里制作水平移动,不做垂直移动。
action_obj.move_by_offset(width, 0).perform()

# 4.松开滑动
action_obj.release()
time.sleep(3)

三:打码平台的介绍

打码平台是一种用于解决验证码,图像识别或文本识别等问题的在线服务平台。用户在注册账号等一些相关操作时会经常出现一些根据提示图片来手动输入或点击的操作。这样可以将需要识别的图片发送给打码平台进行识别处理,平台再将处理结果返回给请求方,以完成数据识别和处理的过程。

超级鹰就是一个这样的平台,它可以帮助我们解决验证码破解、图像识别、文本识别等难题。

官网链接:
https://www.chaojiying.com/

注:在超级鹰使用时首先需要注册账号,而且识别验证码功能会消耗积分,可以通过积分充值(价格较低)或绑定微信(赠送积分)获取积分。
在这里插入图片描述
具体费用参考价格体系:
https://www.chaojiying.com/price.html

在获取积分后,只需要创建一个软件 ID 就可以使用验证码的识别功能了。首选在网页左侧的最下方找到软件 ID 分类,点击进入分类后选择生成一个软件 ID,然后填入软件名称和软件说明并点击提交按钮。这样就会在软件 ID分类中显示刚刚创建的软件ID信息了。
在这里插入图片描述

在做好前面的准备工作之后,就可以开始使用超级鹰的验证码的识别功能。使用前需要先看一下超级鹰提供的开发文档,官方文档中有对应的使用教程和接口参数介绍。

在这里插入图片描述

四:登录案例的实现

超级鹰网站本身就是一个需要输入验证码才能登录的网站,所以这里我们选择超级鹰网站本身来做一个登录验证的案例。

超级鹰对传入的验证码图片有尺寸的要求,而且图片内容必须是识别验证码的部分,不能直接将整个网页截图传给超级鹰。所以我们需要先从网页中截图获取整个页面,然后使用图片裁切出验证码的部分单独保存,再将验证图片发送给超级鹰识别。

图片采集步骤:

  1. 使用save_screenshot()函数进行网页截图;
  2. 安装Pillow图片处理库,用读取网页的截图;
  3. 用Selenium获取网页中验证码的坐标位置;
  4. 对读取网页截图的图片对象调用crop()方法进行裁切;
  5. 将裁剪后的验证码图片单独保存;
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from day13.chaojiying import Chaojiying_Client # 导入超级鹰接口

# 1、创建浏览器对象
driver = webdriver.Chrome()

# 2、发送请求
driver.get('https://www.chaojiying.com/user/login/')

# 3、获取图片坐标
img_element = driver.find_element(By.XPATH, '//div[@class="login_form"]//img')

# 4、将定位的到的验证码图片元素进行截图保存
img_element.screenshot('验证码.png')

# 5、实例化超级鹰的类得到对象
chaojiying = Chaojiying_Client(
'xinyu666', # 用户名
'xinyu666*', # 密码
'951117' # 软件ID
)

# 6、读取验证码图片
image = open('验证码.png', 'rb').read()

# 7、使用超级鹰对象识别图片中的验证码
code = chaojiying.PostPic(image, 1902)['pic_str']
print(code)

# 定位账号输入框,并输入用户账号
driver.find_element(By.NAME, 'user').send_keys('xinyu666')
time.sleep(1)

# 定位密码输入框,并输入用户密码
driver.find_element(By.NAME, 'pass').send_keys('xinyu666*')
time.sleep(1)

# 定义验证码输入框,并输入验证码
driver.find_element(By.NAME, 'imgtxt').send_keys(code)
time.sleep(1)

# 定义登录按钮,并点击按钮登录账号
driver.find_element(By.CLASS_NAME, 'login_form_input_submit').click()
time.sleep(5)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python列表浅拷贝的陷阱与破解之道

引言 在Python编程世界中,列表的拷贝操作看似简单,却常常隐藏着一些令人意想不到的陷阱,尤其是当涉及到浅拷贝时。今天,我们将深入探讨Python列表浅拷贝现象及产生原因,并提供有效的解决方案,帮助你写出更…

Mysql Innodb存储引擎原理—链接如下

Mysql Innodb存储引擎| ProcessOn免费在线作图,在线流程图,在线思维导图 ProcessOn是一个在线协作绘图平台,为用户提供强大、易用的作图工具!支持在线创作流程图、思维导图、组织结构图、网络拓扑图、BPMN、UML图、UI界面原型设计、iOS界面原型设计等。同…

Excel--复制粘贴时怎么跳过隐藏的行和列

方法一 比如如何跳过下面的行复制其他 首先将黄色的背景行按CTRL0隐藏起来 打开定位条件 选择可见单元格,点击确定 然后复制表格粘贴即可 方法二 首先将不需要的行和列隐藏起来,按Alt;锁定可见单元格。 复制粘贴即可,这样粘贴的…

解锁编程潜力,从掌握GitHub开始

目录: 一、搜索开源项目 1、什么是Git 2、Github常用词含义 3、一个完整的项目界面 4、使用Github搜索项目 1)in关键词 2)star或fork数量去查找 3)awesome加强搜索 二、访问速度慢的解决 1、使用网易UU加速器 2、使用…

redisservice jsonobect 转list

redis里存的是json&#xff0c;但是json的格式是list 怎么取出来呢 JSONArray cacheObject (JSONArray) redisService.getCacheObject("sys_dict:dispute_data_source_hn");Class<SysDictData> sysDictDataClass SysDictData.class;List<SysDictData>…

日历时钟怎么设置?桌面日历时钟设置方法

大家好&#xff0c;今天小编给大家介绍一下&#xff0c;日历时钟怎么设置&#xff1f;桌面日历时钟设置方法 第一&#xff1a;先安装《芝麻时钟》这个桌面时钟软件&#xff0c;这个桌面时钟软件非常的强大&#xff0c;可以在桌面显示各种各样的时钟&#xff0c;各种时钟风格大…

ubuntu20.04搭建vue开发环境

1、当前系统版本 cat /etc/issue 2、nodejs安装 sudo apt install nodejs 查看nodejs版本 3、npm安装 sudo apt install npm 查看npm版本 npm -v 4、Vue安装 sudo npm install -g vue-cli 查看版本和是否安装成功 5、创建vue项目 sudo vue init webpack vuedemo 6、运行…

C++之数据类型

//宏常量define&#xff08;注意书写格式&#xff09; #define a 7 //const修饰变量 const int b 365; 命名规则 数据类型之整型&#xff1a; sizeof&#xff08;&#xff09;&#xff1a;求数据类型所占空间大小&#xff0c;字节数 数据类型之实型&#xff08;浮点数&#…

如何使用命令行快速下载Google Drive/OneDrive大文件

OneDrive OneDrive使用wget下载会出现403 forbidden&#xff0c;可通过下面方法下载。 浏览器右键进入检查界面&#xff0c;选择netowork&#xff0c;搜索download.aspx&#xff0c;然后在待下载文件处点击下载&#xff0c;即可出现下载链接&#xff0c;复制为cURL即可下载。…

STM32 之 SDRAM 详解

目录 前言 一、SDRAM 简介 二、SDRAM的组成原理 2.1存储单元阵列 2.1.1地址译码 2.1.2存储电容 2.2控制逻辑 2.2.1时钟同步 2.2.2命令解码 2.2.3模式寄存器 2.3数据输入 / 输出缓冲 2.3.1数据总线 2.3.2数据锁存 2.4刷新电路 2.4.1自动刷新 2.4.2自刷新 三、S…

Parsec问题解决方案

Parsec目前就是被墙了&#xff0c;有解决方案但治标不治本&#xff0c;如果想稳定串流建议是更换稳定的串流软件&#xff0c;以下是一些解决方案 方案一&#xff1a;在%appdata%/Parsec/config.txt中&#xff0c;添加代理 app_proxy_address 127.0.0.1 app_proxy_scheme http…

每日OJ_牛客_乒乓球筐(字符串模拟)

目录 牛客_乒乓球筐&#xff08;简单模拟&#xff09; 解析代码 牛客_乒乓球筐&#xff08;简单模拟&#xff09; 乒乓球筐__牛客网 nowcoder有两盒&#xff08;A、B&#xff09;乒乓球&#xff0c;有红双喜的、有亚力亚的……现在他需要判别A盒是否包含了B盒中所有的种类&a…

Win10安装.net FrameWork3.5失败解决方法

win10安装.net FrameWork3.5失败解决方法 已经好久没有来投稿了,实在最近业务缠身,忙的焦头烂额(呵~多么伟大的牛马) 但最近开发使用windows11实在是拉胯的不行,升级完就后悔,所以就一怒之下,重装了win10 可是,好家伙,我重装完遇到一个问题,就是在使用.Net Framework3.5,按照Mi…

GB28181规范中broadcast和talk模式实际场景时间差别在哪里?

好多开发者对GB28181规范里面&#xff0c;broadcast和talk模式区分不清&#xff0c;今天借此机会&#xff0c;针对GB28181标准中的Broadcast&#xff08;广播&#xff09;和Talk&#xff08;对讲&#xff09;是两种不同的通信模式&#xff0c;它们在视频监控系统中扮演着不同的…

Javaweb项目实现文件导出功能

在我的项目中&#xff0c;我将模糊查询与文件导出结合使用&#xff0c;实现下载前端列表展示的数据到本地 导入maven坐标 <!--导出为表需要--> <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version&…

算法知识点————双指针【删除重复元素】【反转链表】

删除重复元素 题目&#xff1a;//给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数 思路&#xff1a…

CleanClip for mac(苹果电脑剪切板管理器)

CleanClip 是一款为 Mac 设计的强大剪贴板管理工具&#xff0c;它能够显著提升你的工作效率和生产力。无论是在日常办公中还是进行创意设计&#xff0c;CleanClip 都能帮助你更轻松地管理和使用剪贴板内容。让我们一起来探索一下这个功能丰富的软件吧&#xff01; 下载地址&am…

常见文档工具对比和选择

前言 文档工具的本质&#xff0c;其实都是将我们的文档内容标准化&#xff0c;在互联网环境上的文档&#xff0c;一般目前比较主流的是生成文档的 html 网页内容&#xff0c;而文档内容的作者都比较倾向于使用纯文本的 Markdown 进行书写&#xff0c;所以文档工具的核心内容主要…

蒙特卡罗方法——布丰投针实验近似计算圆周率python代码实现

布丰实验 数学原理 python代码 import random as rd import numpy as np import math import matplotlib.pyplot as plt import matplotlib matplotlib.rcParams[font.family] SimHei # 或者 Microsoft YaHei matplotlib.rcParams[axes.unicode_minus] False # 解决负号- …

标签的ref属性

标签的ref属性 当我们想要获取一个标签对应的 DOM 元素的时候在 JavaScript 中&#xff0c;我们通过 document.getElementById() 来借助类选择器的写法获取&#xff0c;但是在 Vue 中&#xff0c;我们的 DOM 元素是挂载在同一个网页上的&#xff0c;这些名称难免会重复&#x…