点触验证码是一种常见的反爬手段

解决方案有两种:一种是直接解决,这需要深度学习机器学习等图像处理技术,以大量的数据训练识别模型,最终达到模型足矣识别图片中的文字提示和应该点击的区域之间的对应关系。

这需要非常专业的设备,比如TPU运算,和专业的开发和维护人员。

因此市面上有专业解决此类问题的OCR解决提供商。也就是第二种间接解决的方案,调用第三方接口。

我们可以使用两种方案

  • selenium
  • 接口逆向

本文介绍是第二种方法 当然 属于比较简单的那种



验证码如上文所示

ocr的使用

我们使用DDDDocr去过这个验证,但是成功几率不高

镜像安装

pip install ddddocr -i https://pypi.tuna.tsinghua.edu.cn/simple

接口分析

过验证 首先分析接口



如上图 我们可知 这是发送了两个请求

经分析可知

我们先访问 http://www.yngp.com/api/captcha/captcha.get.svc check这个链接

拿到参数

然后拿到里面的参数 originalImageBase64 wordList secretKey token这些值

然后把这个originalImageBase64 这个值base64解码 得到图片

从而传入 DDDDocr中 解析图片 得到图片的xy轴

部分代码如下

data = {"captchaType": "clickWord", "clientUid": "point-c1db047e-ccf0-4826-a611-c05ea3eccf3c",
"ts": int(time.time() * 1000)}
self.session.headers = self.headers
response = self.session.post('http://www.yngp.com/api/captcha/captcha.get.svc', data=data)
img_content = base64.b64decode(response.json()['data']['repData']['originalImageBase64'])
wordList = response.json()['data']['repData']['wordList']
key = response.json()['data']['repData']['secretKey']
token = response.json()['data']['repData']['token']
# 解析图片 得到图片的xy轴
img_xy = self.dd.decrypt(img_content)

二次分析

我们进入断点可知 这个postJson是我们所需要的值





可以看到 这个值是根据xy加密所得

只需要进行ECB模式下的AES加密即可完成解密

具体代码如下

# -*- coding: utf-8 -*-
# @Time : 2022/9/16 15:43
# @Author : lzc
# @Email : hybpjx@163.com
# @File : YunNanBidding.py
# @Software: PyCharm
import base64
import time
import requests
from requests.utils import add_dict_to_cookiejar from utils.DDDDOCR import Ddddocr
from utils.InverseAlgorithm import InverseAlgorithm ia = InverseAlgorithm() class Bidding:
cookies = {
'route': 'a4dbdaac35560ad2faee898d4f49072d',
} headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36',
}
dd = Ddddocr() session = requests.session() requests.utils.add_dict_to_cookiejar(session.cookies, cookies) def get_text(self):
data = {"captchaType": "clickWord", "clientUid": "point-c1db047e-ccf0-4826-a611-c05ea3eccf3c",
"ts": int(time.time() * 1000)}
self.session.headers = self.headers
response = self.session.post('http://www.yngp.com/api/captcha/captcha.get.svc', data=data)
img_content = base64.b64decode(response.json()['data']['repData']['originalImageBase64'])
wordList = response.json()['data']['repData']['wordList']
key = response.json()['data']['repData']['secretKey']
token = response.json()['data']['repData']['token']
img_xy = self.dd.decrypt(img_content)
xy_data = ""
# [{\"x\":49,\"y\":48},{\"x\":102,\"y\":116},{\"x\":242,\"y\":46}]
# [{\"x\":55,\"y\":78},{\"x\":147,\"y\":79},{\"x\":228,\"y\":65}]
for li in wordList:
x, y = img_xy[li] xy_data += r'{"x":%d,"y":%d},' % (x, y) print(li, '坐标:', x, ',', y)
en_text = f"[{xy_data[:-1]}]"
pointjson = ia.aes_ECB_encrypt(key, en_text)
print('成功', en_text)
postdata = {"captchaType": "clickWord",
"pointJson": pointjson,
"token": token,
"clientUid": "point-01a36d7d-2bff-49d0-bd09-e10b6e744bb9",
"ts": int(time.time() * 1000)}
self.session.post('http://www.yngp.com/api/captcha/captcha.check.svc',
json=postdata, verify=False)
captchaCheckId = ia.aes_ECB_encrypt(key, str(str(token) + '---' + en_text))
print(captchaCheckId)
postdata = {'current': '1',
'rowCount': '10',
'searchPhrase': '',
'query_bulletintitle': '矿',
'query_bulletinclass': '',
'query_unitcode': '',
'query_startTime': '',
'query_endTime': '',
'query_districtcode': ''}
url = 'http://www.yngp.com/api/procurement/Procurement.searchForMainList.svc?captchaCheckFlag=' + captchaCheckId + '&p=1' reson = self.session.post(
url=url,
data=postdata,
)
print(reson.text) if __name__ == '__main__':
Bidding().get_text()

JS逆向实战6-- x轴 y轴 过点触验证码的更多相关文章

  1. d3.js多个x轴y轴canvas柱状图

    最终效果图镇楼: 本文通过三个步骤来介绍d3.js. 1.简单的柱状图: 2.多个x轴的柱状图: 3.多个x轴.y轴的柱状图: 学习心得: d3.js入门相对比较困难,一旦掌握了核心思想,不断熟悉AP ...

  2. 在线报表设计实战系列 – 制作多Y轴组合图表(8)

    葡萄城报表是一套强大的报表开发和系统搭建工具,既能与您开发的报表软件项目紧密集成,也可独立部署运行,支持多数据源,具有无编码.灵活.稳定等特性,可以帮您快速搭建专业的报表软件系统,实现各类报表的设计. ...

  3. vue中使用v-chart改变柱状图颜色以及X轴Y轴的文字颜色和大小以及标题

    1.html部分 <ve-histogram :tooltip-visible="true" :x-axis="xAxis" :y-axis=" ...

  4. highcharts 不显示X轴 Y轴 刻度

    xAxis: { tickWidth:0,        //设置刻度标签宽度 lineColor:'#ffffff',//设置坐标颜色 lineWidth:0,        //设置坐标宽度 la ...

  5. 3d照片环效果(修改版--添加了x轴y轴双向转动和修复模糊度的bug)

    今天用用前两天总结的css3新效果写了一个3d照片环的效果,其中还有些bug大家可以看一看,一起改进. <!DOCTYPE html> <html lang="en&quo ...

  6. PhoneGap 加速计 api 获取加速计 x 轴 y 轴 z 轴信息

    一.PhoneGap 加速计 Accelerometer 对象介绍 1.主要方法 accelerometer.getCurrentAcceleration 获取当前设备在 x,y,z 轴上的加速度信息 ...

  7. Echarts X轴 Y轴 线的类型、颜色、及标签字体颜色 设置

    // 人均效能 var initRjxnChart = function () { var rjxnChart = echarts.init(document.getElementById(" ...

  8. svg 动画 透明度 放大缩小 x轴Y轴

    参考链接:https://www.cnblogs.com/Chrimisia/p/6670303.html vue 中封装svg:http://www.cnblogs.com/Jiangchuanwe ...

  9. JS逆向实战3——AESCBC 模式解密

    爬取某省公共资源交易中心 通过抓包数据可知 这个data是我们所需要的数据,但是已经通过加密隐藏起来了 分析 首先这是个json文件,我们可以用请求参数一个一个搜 但是由于我们已经知道了这是个json ...

随机推荐

  1. 爬虫简介与excel表格操作

    爬虫简介与excel表格操作 re模块简介 1.在python中使用正则表达式的话那么re模块就是选择之一 import re # 导入re模块 2.在re模块中使用findall找到所有我们给他的值 ...

  2. ABC209F. Deforestation——DP(、数学容斥)

    题面 有 n n n 棵树排成一排,每棵树高度为 h i ( i ∈ [ 1 , n ] ) h_i~(i\in[1,n]) hi​ (i∈[1,n]) ,你现在要按照一个排列 P P P 的顺序去砍 ...

  3. 【manim】含有add_updater更新函数become的物体移动方法

    在manim社区版本中, 一.对于一般的物体,移动的方法分为 (瞬移) 和 (带动画移动) 1.瞬移        #直接对物体操作即可    obj.shift(LEFT)         #瞬间移 ...

  4. npm 和 maven 使用 Nexus3 私服 | 前后端一起学

    前文<Docker 搭建 Nexus3 私服 >介绍了在 docker 环境下安装 nexus3 以及 nexus3 的基本操作和管理,本文分别介绍 npm(前端)和 maven(后端)如 ...

  5. openstack中Cinder组件简解

    一,Cinder组件介绍 概念 cinder组件作用: 块存储服务,为运行实例提供稳定的数据块存储服务 块存储服务,提供对 volume 从创建到删除整个生命周期的管理 二,常用操作 1.Volume ...

  6. Linux虚拟机 RHEL8.0安装步骤

    一. 创建空白虚拟机 1.打开 VMware 虚拟机软件依次选择新建虚拟机并选择选择"自定义" 自定义功能更加全面,典型就是比较简单的配置 2.选择对应的 VMware 版本,此则 ...

  7. Openstack neutron:SDN现状

    目录 - SDN现状 - (一)SDN现状 - SDN诞生的背景 - SDN的介绍 - (二)SDN领域的相关组织和发展现状 - 1.ONF - 2.OpenDaylight - 3. IETF -  ...

  8. typescript中对象属性可选属性与只读属性与索引签名

    可选属性 type类型别名 type 会给一个类型起个新名字. type 有时和 interface 很像,但是可以作用于原始值(基本类型),联合类型,元组以及其它任何你需要手写的类型. interf ...

  9. 组件化开发1-git命令简洁版

    1-给项目添加git git init 2-查询当前状态,(红色显示的为在工作区,绿色为暂缓区) git status 3-提交到暂缓区 git add . 4-提交到本地仓库('xxxx'里面为注释 ...

  10. nsis离开自定义页面保存设置

    这是群里一位朋友问他的自定义页面设置完成后返回上一步无法保存怎么办写的一个小例子,拓展了下,只要不关闭,不管上一步还是进入下一步返回都可以保留原页面设置. !include LogicLib.nsh ...