使用超人打码平台 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)