用selenium实现打码平台

注:本文以  人人网登陆 为例

import time
from selenium import webdriver
# 准备一个名为yudama的py文件
from yudama import indetify_by_filepath

driver = webdriver.Chrome()
driver.get('http://www.renren.com/')

# 输入账号框的id:email    
    输入人人网账号
# 输入密码框的id:password   
    输入人人网密码
driver.find_element_by_id('email').send_keys('xxx')
driver.find_element_by_id('password').send_keys('xxx')

# 半自动
# icode = input('请输入验证码:')

# 全自动解决验证码
time.sleep(1)
# 验证码id:verifyPic_login
# 根据验证码图片的id找到验证码
verifyPic = driver.find_elements_by_id('verifyPic_login')
if verifyPic:
    img = verifyPic[0].screenshot_as_png
    icode=indetify_by_filepath(img)
    # 输入验证码框的id:icode
    driver.find_element_by_id('icode').send_keys(icode)
    # 登录键id:login
    driver.find_element_by_id('login').click()


# time.sleep(5)
# driver.close()

    

百度搜索 云打码

 

 点击开发文档

 

 调用示例及最新DLL  -->  PythonHTTP示例下载

 

 打开下载好的py文件,更改配置

yudama.py

#coding=utf-8
import http.client, mimetypes, urllib, json, time, requests


######################################################################

class YDMHttp:
    apiurl = 'http://api.yundama.com/api.php'
    username = ''
    password = ''
    appid = ''
    appkey = ''

    def __init__(self, username, password, appid, appkey):
        self.username = username
        self.password = password
        self.appid = str(appid)
        self.appkey = appkey

    def request(self, fields, files=[]):
        response = self.post_url(self.apiurl, fields, files)
        response = json.loads(response)
        return response

    def balance(self):
        data = {'method': 'balance', 'username': self.username, 'password': self.password, 'appid': self.appid,
                'appkey': self.appkey}
        response = self.request(data)
        if (response):
            if (response['ret'] and response['ret'] < 0):
                return response['ret']
            else:
                return response['balance']
        else:
            return -9001

    def login(self):
        data = {'method': 'login', 'username': self.username, 'password': self.password, 'appid': self.appid,
                'appkey': self.appkey}
        response = self.request(data)
        if (response):
            if (response['ret'] and response['ret'] < 0):
                return response['ret']
            else:
                return response['uid']
        else:
            return -9001

    def upload(self, filename, codetype, timeout):
        data = {'method': 'upload', 'username': self.username, 'password': self.password, 'appid': self.appid,
                'appkey': self.appkey, 'codetype': str(codetype), 'timeout': str(timeout)}
        file = {'file': filename}
        response = self.request(data, file)
        if (response):
            if (response['ret'] and response['ret'] < 0):
                return response['ret']
            else:
                return response['cid']
        else:
            return -9001

    def result(self, cid):
        data = {'method': 'result', 'username': self.username, 'password': self.password, 'appid': self.appid,
                'appkey': self.appkey, 'cid': str(cid)}
        response = self.request(data)
        return response and response['text'] or ''

    def decode(self, filename, codetype, timeout):
        cid = self.upload(filename, codetype, timeout)
        if (cid > 0):
            for i in range(0, timeout):
                result = self.result(cid)
                if (result != ''):
                    return cid, result
                else:
                    time.sleep(1)
            return -3003, ''
        else:
            return cid, ''

    def post_url(self, url, fields, files=[]):
        # for key in files:
        #     files[key] = open(files[key], 'rb');
        res = requests.post(url, files=files, data=fields)
        return res.text


######################################################################

# 用户名  输入自己云打码账号
username = 'xxx'

# 密码  输入自己的云打码密码
password = 'xxx'

# appid
appid = 1

# appkey
appkey = '22cc5376925e9387a23cf797cb9ba745'

# 验证码类型
codetype = 1005

# 超时
timeout = 60


def indetify(response_content):
    if (username == 'username'):
        print('请设置好相关参数再测试')
    else:
        # 初始化
        yundama = YDMHttp(username, password, appid, appkey)

        # 登陆云打码
        uid = yundama.login()
        print('uid: %s' % uid)

        # 查询余额
        balance = yundama.balance()
        print('balance: %s' % balance)

        # 开始识别,图片路径,验证码类型ID,超时时间(秒),识别结果
        cid, result = yundama.decode(response_content, codetype, timeout)
        print('cid: %s, result: %s' % (cid, result))
        return result


def indetify_by_filepath(file_path): #打开注释
    if (username == 'username'):
        print('请设置好相关参数再测试')
    else:
        # 初始化
        yundama = YDMHttp(username, password, appid, appkey)

        # 登陆云打码
        uid = yundama.login()
        print('uid: %s' % uid)

        # 查询余额
        balance = yundama.balance()
        print('balance: %s' % balance)

        # 开始识别,图片路径,验证码类型ID,超时时间(秒),识别结果
        cid, result = yundama.decode(file_path, codetype, timeout)
        print('cid: %s, result: %s' % (cid, result))
        return result


######################################################################
if __name__ == '__main__':
    url = "http://qian.sicent.com/Login/code.do"
    content = requests.get(url).content
    # 以二进制形式写入文件
    with open("test.png", "wb") as f:
        f.write(content)
    indetify(content)

posted @ 2019-11-03 21:49  一心取信  阅读(646)  评论(0)    收藏  举报