百度莱茨狗python自动抢狗,调用百度OCR或者人工识别验证码
2018-02-09 09:44
316 查看
本项目是利用了selenium+chrome来自动抢狗,类似于爬虫,可以设置抢狗的金额范围。验证码识别是调用百度云端OCR识别,速度不算快,1到2秒左右,准确率50%吧,如果嫌不准也可以自己手敲验证码。
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) + '秒')
主文件
from splinter.browser import Browserfrom 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) + '秒')
代码地址
相关文章推荐
- Python 3调用百度OCR API实现剪贴板文字识别
- 用Python调用百度OCR接口实例
- 实践项目五:python调用百度API实现自动检测翻译
- 百度ocr开放api调用python代码
- python 3调用百度OCR API实现剪贴板文字识别
- PY++ 自动将你的C++程序接口封装供python调用
- 调用脚本的方式自动的创建或者是更新oracle数据库自带的Seq序列号的值
- 用python调用百度AI进行情感分析探索与股票之间的关系
- python程序如何在生产和测试环境自动调用对应的配置文件
- Python爬虫之百度API调用
- OCR----Python调用Tesseract引擎(Ubuntu下)
- Python模拟百度自动输入搜索功能
- Python 调用百度API
- 调用百度AI实现人脸识别-Python
- 根据两个经纬度点调用百度地图应用查询路线 适用android或者ios中及网页浏览(手机网页同样适用)
- python调用autoit组件自动使用plsqldev导出每日需要的业务报表
- iOS 自动登录或者记住密码,求个Demo,不知如何调用
- selenium2+python_用cookie实现自动登录(百度首页为例)
- 百度定制化图像开放平台使用--调用识别接口(python3代码)
- python 调用不同目录里的 包package 或者 模块module