使用超人打码平台 API 破解极验成语验证码
破解极验成语验证码很简单:只需借用外部 API 然后用艺赛旗的鼠标点击接口依次点击屏幕位置即可。
注意代码中用户名与密码以及坐标需要对应进行修改。
import requests
import json
import random
import binascii
import os
import glob
import time
import ubpa.iie as iie
import ubpa.iimg as iimg
"""
本例借用超人打码平台破解极验成语验证码
"""
# 首先略去登录网站流程
lv_1 = iimg.capture_image(win_title=r'国家企业信用信息公示系统 - Internet Explorer',win_text=r'',in_img_path=r'C:/Users/DuZeyao/Desktop/mp/',left_indent=636,top_indent=334,width=313,height=402,waitfor=30)
# 截取成语验证码区域图像至本地文件
class Chaoren():
def __init__(self):
self.s = requests.Session()
self.s.encoding = 'utf-8'
self.data = {
'username': 'username', # 用户名
'password': 'password', # 密码
'softid': '1', # 软件id
'imgid': '',
'imgdata': ''
}
def get_left_point(self):
try:
r = self.s.post('http://apib.sz789.net:88/GetUserInfo.ashx', self.data)
return r.json()
except requests.ConnectionError:
return self.get_left_point()
except:
return False
def recv_byte(self, imgdata):
self.data['imgdata'] = binascii.b2a_hex(imgdata).upper()
try:
r = self.s.post('http://apib.sz789.net:88/RecvByte.ashx', self.data)
res = r.json()
if res[u'info'] == -1:
return False
return r.json()
except requests.ConnectionError:
return self.recv_byte(imgdata)
except:
return False
def report_err(self, imgid):
self.data['imgid'] = imgid
if self.data['imgdata']:
del self.data['imgdata']
try:
r = self.s.post('http://apib.sz789.net:88/ReportError.ashx', self.data)
return r.json()
except requests.ConnectionError:
return self.report_err(imgid)
except:
return False
def run_supermandama(imgpath):
client = Chaoren()
client.data['username'] = 'username' # 账号
client.data['password'] = 'password' # 密码
#查剩余验证码点数
print (client.get_left_point())
#提交识别
# imgpath = os.path.join(os.path.dirname(__file__),'iZ6gRwGI.png')
imgdata = open(imgpath,'rb').read()
res = client.recv_byte(imgdata)
#识别结果
#当验证码识别错误时,报告错误
return res[u'result']
current_path = r'C:\Users\DuZeyao\Desktop\mp' #存放图片的文件夹路径
png_paths = glob.glob(os.path.join(current_path, '*.png'))
png_path = png_paths[0] # 获取路径内第一个png文件
supermandama_result=run_supermandama(png_path) # 获取超人打码结果
print(supermandama_result.split(';')) # 得到所有点击顺序坐标并打印出来
positions = supermandama_result.split(';')
position = [] # 坐标的列表
lv_position_x = [] # x坐标的列表
lv_position_y = [] # y坐标的列表
for i in range(len(positions)):
if positions[i]:
position.append(positions[i].split(','))
lv_position_x.append(position[i][0])
lv_position_y.append(position[i][1])
for i in range(len(lv_position_x)):
# 在这个循环中,鼠标依次点击几个坐标。注意此处坐标偏移要根据具体屏幕情况做修正
time.sleep(2.5)
iie.do_click_pos(win_title=r'国家企业信用信息公示系统 - Internet Explorer',url=r'http://www.gsxt.gov.cn/index.html',selector=r'DIV:nth-of-type(7) > DIV:nth-of-type(2) > DIV:nth-of-type(6) > DIV:nth-of-type(1) > DIV:nth-of-type(1) > DIV:nth-of-type(1)',button=r'left',curson=r'lefttop',offsetX=int(lv_position_x[i]),offsetY=int(lv_position_y[i]),times=1,waitfor=10)
# 鼠标点击确认
iie.do_click_pos(win_title=r'国家企业信用信息公示系统 - Internet Explorer',url=r'http://www.gsxt.gov.cn/index.html',selector=r'DIV:nth-of-type(7) > DIV:nth-of-type(2) > DIV:nth-of-type(6) > DIV:nth-of-type(1) > DIV:nth-of-type(1) > DIV:nth-of-type(3) > A:nth-of-type(1) > DIV:nth-of-type(1)',button=r'left',curson=r'center',times=1,waitfor=10)