百度莱茨狗python自动抢狗,调用百度OCR或者人工识别验证码

本项目是利用了selenium+chrome来自动抢狗,类似于爬虫,可以设置抢狗的金额范围。验证码识别是调用百度云端OCR识别,速度不算快,1到2秒左右,准确率50%吧,如果嫌不准也可以自己手敲验证码。


主文件

from splinter.browser import Browser
from time import sleep

import urllib.request
import recognize_img as ocr

#from selenium.webdriver.support.wait import WebDriverWait
#from selenium.webdriver.support import expected_conditions as EC
#from selenium.webdriver.common.by import By




# 初始化驱动
driver = Browser(driver_name="chrome",executable_path=r"./chromedriver.exe")
# 初始化浏览器窗口大小
# driver.driver.set_window_size(1400, 1000)
driver.driver.maximize_window()
driver.visit("https://pet-chain.baidu.com/")
# 这里先自己登陆莱茨狗官网,然后把登陆后的cookies复制到这里,{'name':'key', 'value':'value'}格式添加
driver.driver.add_cookie({'name':'__cfduid', 'value':'xxxxxx'})
driver.driver.add_cookie({'name':'BAIDUID', 'value':'xxxxxx'})
driver.driver.add_cookie({'name':'FG', 'value':'xxxxxx'})
driver.driver.add_cookie({'name':'PSTM', 'value':'xxxxxx'})
driver.driver.add_cookie({'name':'BIDUPSID', 'value':'xxxxxx'})
driver.driver.add_cookie({'name':'MCITY', 'value':'xxxxxx'})
driver.driver.add_cookie({'name':'H_PS_PSSID', 'value':'xxxxxx'})
driver.driver.add_cookie({'name':'BDRCVFR[feWj1Vr5u3D]', 'value':'xxxxxx'})
driver.driver.add_cookie({'name':'PSINO', 'value':'xxxxxx'})
driver.driver.add_cookie({'name':'BDORZ', 'value':'xxxxxx'})
driver.driver.add_cookie({'name':'BDUSS', 'value':'xxxxxx'})

#def wait_display(xpath):
#    WebDriverWait(driver.driver, 10, 0.5).until(EC.element_to_be_clickable((By.XPATH, xpath)))  # 显性等待

def is_chinese(s):
    if s >= u'\u4e00' and s<=u'\u9fa5':
     return True
    else:
        return False

def get_cheap_dog():
    sleep(0.5)
    driver.find_by_text(u"价格").click()
    # driver.driver.find_element_by_xpath("//header/div/div/span[2]").click()

    sleep(1) # 强制等待
    # driver.driver.implicitly_wait(3) # 隐式等待
    # wait_display("//div[@class='dog']") # 显性等待

    dog_list = driver.driver.find_elements_by_xpath("//div[@class='dog']")#/dl/dd/h3/span[2]")

    return dog_list

def get_verification_code():
    sleep(0.5)
    image_url = driver.driver.find_element_by_xpath("//div[@class='sms-img']/img").get_attribute("src")
    response = urllib.request.urlopen(image_url)
    verify_img = response.read()
    with open('download.jpg', 'wb') as f:
        f.write(verify_img)
    v_code = ocr.start_recognize(r"download.jpg")
    return v_code


if __name__ == '__main__':
    isFirst = True

    while True:
        try:
            if isFirst:
                isFirst = False
            else:
                driver.visit("https://pet-chain.baidu.com/")

            dog_list = get_cheap_dog()
            for item in dog_list:
                price = int(float(item.find_element_by_xpath("dl/dd/div/span/span").text))
                # print(price)
                if price <= 500: # 设置金额
                    item.click()

                    while True:
                        sleep(0.5)
                        driver.find_by_text("确认购买").click()
                        # v_code = "EFR9"
                        # sleep(1)

                        # 百度OCR识别
                        # v_code = get_verification_code()
                        # while len(v_code) != 4 or not v_code.isalnum() or is_chinese(v_code): # 长度不等于4,不是字母和数字,包含中文
                        #     driver.driver.find_element_by_xpath("//i[@class='icon-font icon-shuaxin']").click()
                        #     v_code = get_verification_code()
                        # driver.driver.find_element_by_xpath("//input").send_keys(v_code)

                        # 人工输入
                        sleep(0.5)
                        v_code = ""
                        driver.driver.find_element_by_xpath("//input").send_keys("")
                        while True:
                            v_code = driver.driver.find_element_by_xpath("//input").get_attribute("value")
                            # print("v_code:",v_code)
                            if len(v_code) == 4:
                                break
                            else:
                                sleep(0.5)

                        sleep(0.5)
                        driver.find_by_text("立即购买").click()

                        sleep(1)
                        msg = driver.driver.find_element_by_xpath("//span[@class='mint-toast-text']").text
                        if msg != "验证码错误":
                            print("="*10,msg,"="*10)
                            break

                    break

        except Exception as error:
            print(error)


OCR验证码识别文件代码

import time
from PIL import Image
from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
from aip import AipOcr

""" (百度ocr)你的 APPID AK SK """
APP_ID = 'xxxxxx'
API_KEY = 'xxxxxx'
SECRET_KEY = 'xxxxxx'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)


""" 读取图片 """
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()

def start_recognize(file):
    start = time.time()

    im = Image.open(file)
    w, h = im.size
    region = im.resize((int(w * 1.5), int(h * 1.5)))
    region.save(r"./tmp.png")

    image = get_file_content(r"tmp.png")
    respon = client.basicGeneral(image)  # 用完500次后可改respon = client.basicAccurate(image)
    titles = respon['words_result']  # 获取问题
    print("respon:", respon)
    print("验证码:", titles[0]['words'])

    end = time.time()
    print('程序用时:' + str(end - start) + '秒')
    return  titles[0]['words']

if __name__ == '__main__':
    start = time.time()

    im = Image.open(r"D:\python_work\other\OpenCV\Chapter 7_Code\images\number.PNG")
    w, h = im.size
    print("xx:{}".format(im.size))
    # region = im.crop((70,200, w-70,700))    #裁剪的区域
    region = im.resize((int(w * 1.5), int(h * 1.5)))
    region.save(r"./crop_test1.png")

    image = get_file_content(r"crop_test1.png")
    respon = client.basicGeneral(image)  # 用完500次后可改respon = client.basicAccurate(image)
    titles = respon['words_result']  # 获取问题
    print("respon:", respon, "\ntitles:", titles[0]['words'])

    end = time.time()
    print('程序用时:' + str(end - start) + '秒')

代码地址

识别结果大概是这样 {'result': {'face_num': 1, 'face_list': [{'quality': {'occlusion': {'right_eye': 0, 'left_cheek': 0.1459853947, 'right_cheek': 0.05144193396, 'left_eye': 0.465408802, 'mouth': 0.02919708006, 'chin_contour': 0.01420217194, 'nose': 0}, 'illumination': 116, 'blur': 7.266304692e-06, 'completeness': 1}, 'age': 22, 'face_token': 'dc6f8f9df5d977ea476e2d04acdf5063', 'race': {'type': 'white', 'probability': 0.6173604727}, 'glasses': {'type': 'common', 'probability': 0.9834988713}, 'gender': {'type': 'male', 'probability': 0.655915916}, 'face_probability': 0.9185044169, 'beauty': 51.21487427, 'angle': {'roll': -2.750922441, 'yaw': 28.97134399, 'pitch': 5.202290535}, 'location': {'height': 65, 'top': 112.0704803, 'width': 76, 'left': 76.20765686, 'rotation': -4}, 'face_type': {'type': 'human', 'probability': 0.9992217422}, 'face_shape': {'type': 'oval', 'probability': 0.4419156313}, 'expression': {'type': 'none', 'probability': 0.9999142885}}]}, 'error_msg': 'SUCCESS', 'timestamp': 1537413754, 'cached': 0, 'error_code': 0, 'log_id': 9465840013520} 年龄:22 颜值:51.21487427 表情-type(none:不笑;smile:微笑;laugh:大笑):none 表情-probability(表情置信度,范围【0~1】,0最小、1最大):0.9999142885 脸型-type(square: 正方形 triangle:三角形 oval: 椭圆 heart: 心形 round: 圆形):oval 脸型-probability(置信度,范围【0~1】,代表这是人脸形状判断正确的概率,0最小、1最大):0.4419156313 性别-type(male:男性 female:女性):male 性别-probability(性别置信度,范围【0~1】,0代表概率最小、1代表最大。):0.655915916 是否带眼镜-type(none:无眼镜,common:普通眼镜,sun:墨镜):common 是否带眼镜-probability(眼镜置信度,范围【0~1】,0代表概率最小、1代表最大。):0.9834988713 人种-type(yellow: 黄种人 white: 白种人 black:黑种人 arabs: 阿拉伯人):white 人种-probability(人种置信度,范围【0~1】,0代表概率最小、1代表最大。):0.6173604727 真实人脸/卡通人脸 -type(human: 真实人脸 cartoon: 卡通人脸):human 真实人脸/卡通人脸 -probability(人脸类型判断正确的置信度,范围【0~1】,0代表概率最小、1代表最大。):0.9992217422
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值