python实现百万答题自动百度搜索答案
作者:书包的故事 发布时间:2021-10-06 03:57:11
标签:python,百万答题,答题
用python搭建百万答题、自动百度搜索答案。
使用平台
windows7
python3.6
MIX2手机
代码原理
手机屏幕内容同步到pc端
对问题截图
对截图文字分析
用浏览器自动搜索文本
使用教程
1、使用Airdroid 将手机屏幕显示在电脑屏幕上。也可使用360手机助手实现。不涉及任何代码。实现效果如图:
2、在提问出现时,运行python程序,将问题部分截图。
这里要用到两个函数:
get_point() #采集要截图的坐标,以及图片的高度宽度
window_capture() #截图
def get_point():
'''''采集坐标,并返回w,h,x,y。 作为window_capture() 函数使用'''
try:
print('正在采集坐标1,请将鼠标移动到该点')
# print(3)
# time.sleep(1)
print(2)
time.sleep(1)
print(1)
time.sleep(1)
x1,y1 = pag.position() #返回鼠标的坐标
print('采集成功,坐标为:',(x1,y1))
print('')
# time.sleep(2)
print('正在采集坐标2,请将鼠标移动到该点')
print(3)
time.sleep(1)
print(2)
time.sleep(1)
print(1)
time.sleep(1)
x2, y2 = pag.position() # 返回鼠标的坐标
print('采集成功,坐标为:',(x2,y2))
#os.system('cls')#清除屏幕
w = abs(x1 - x2)
h = abs(y1 - y2)
x = min(x1, x2)
y = min(y1, y2)
return (w,h,x,y)
except KeyboardInterrupt:
print('获取失败')
def window_capture(result,filename):
'''''获取截图'''
#宽度w
#高度h
#左上角截图的坐标x,y
w,h,x,y=result
hwnd = 0
hwndDC = win32gui.GetWindowDC(hwnd)
mfcDC = win32ui.CreateDCFromHandle(hwndDC)
saveDC = mfcDC.CreateCompatibleDC()
saveBitMap = win32ui.CreateBitmap()
MoniterDev = win32api.EnumDisplayMonitors(None,None)
#w = MoniterDev[0][2][2]
# #h = MoniterDev[0][2][3]
# w = 516
# h = 514
saveBitMap.CreateCompatibleBitmap(mfcDC,w,h)
saveDC.SelectObject(saveBitMap)
saveDC.BitBlt((0,0),(w,h),mfcDC,(x,y),win32con.SRCCOPY)
saveBitMap.SaveBitmapFile(saveDC,filename)
运行后截图如下
3.对图片文字分析提取
参考链接: * 图片转文本 * 配置方式
代码部分:
def orc_pic():
#识别中文
text=pytesseract.image_to_string(Image.open('jietu.jpg'),lang='chi_sim')
#识别英文
# text=pytesseract.image_to_string(Image.open('jietu.jpg'))
text = ''.join(text.split())
return text
4.对文本进行搜索
#浏览器搜索
url = 'http://www.baidu.com/s?wd=%s' % text
webbrowser.open(url)
所有代码如下:
#coding:'utf-8'
import win32gui, win32ui, win32con, win32api
from PIL import Image
import pytesseract
import webbrowser
#先下载pyautogui库,pip install pyautogui
import os,time
import pyautogui as pag
#获取sdk http://ai.baidu.com/。
#获取aip pip install git+https://github.com/Baidu-AIP/python-sdk.git@master
from aip import AipOcr
import json
status=0
""" 你的 APPID AK SK """
APP_ID = '****'
API_KEY = '***'
SECRET_KEY = '***'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
""" 读取图片 """
def get_question(path):
'''百度识别图片文字'''
with open(path, 'rb') as fp:
image=fp.read()
res = client.basicGeneral(image)
words = res['words_result']
lines = [item['words'] for item in words]
question = ''.join(lines)
if question[1] == '.':
question = question[2:]
elif question[2] == '.':
question = question[3:]
return question.replace('?', ' ')
#采集坐标
def get_point():
'''采集坐标,并返回w,h,x,y。 作为window_capture() 函数使用'''
try:
print('正在采集坐标1,请将鼠标移动到该点')
# print(3)
# time.sleep(1)
print(2)
time.sleep(1)
print(1)
time.sleep(1)
x1,y1 = pag.position() #返回鼠标的坐标
print('采集成功,坐标为:',(x1,y1))
print('')
# time.sleep(2)
print('正在采集坐标2,请将鼠标移动到该点')
print(3)
time.sleep(1)
print(2)
time.sleep(1)
print(1)
time.sleep(1)
x2, y2 = pag.position() # 返回鼠标的坐标
print('采集成功,坐标为:',(x2,y2))
#os.system('cls')#清除屏幕
w = abs(x1 - x2)
h = abs(y1 - y2)
x = min(x1, x2)
y = min(y1, y2)
return (w,h,x,y)
except KeyboardInterrupt:
print('获取失败')
#获取截图
def window_capture(result,filename):
'''获取截图'''
#宽度w
#高度h
#左上角截图的坐标x,y
w,h,x,y=result
hwnd = 0
hwndDC = win32gui.GetWindowDC(hwnd)
mfcDC = win32ui.CreateDCFromHandle(hwndDC)
saveDC = mfcDC.CreateCompatibleDC()
saveBitMap = win32ui.CreateBitmap()
MoniterDev = win32api.EnumDisplayMonitors(None,None)
#w = MoniterDev[0][2][2]
# #h = MoniterDev[0][2][3]
# w = 516
# h = 514
saveBitMap.CreateCompatibleBitmap(mfcDC,w,h)
saveDC.SelectObject(saveBitMap)
saveDC.BitBlt((0,0),(w,h),mfcDC,(x,y),win32con.SRCCOPY)
saveBitMap.SaveBitmapFile(saveDC,filename)
def get_point_txt(status):
#如果status=y,则重新获取坐标
'''如果存在point.txt,则询问是否重新采集,删除point.txt;如果不存在txt,则直接采集。'''
if not os.path.isfile('point.txt') :
result = get_point()
with open('point.txt', 'w') as f:
f.write(str(result))
return result
else:
if status=='y':
result = get_point()
with open('point.txt', 'w') as f:
f.write(str(result))
return result
else:
with open('point.txt', 'r') as f:
result = f.readline()
result = eval(result)
return result
def orc_pic():
#识别中文
text=pytesseract.image_to_string(Image.open('jietu.jpg'),lang='chi_sim')
#识别英文
# text=pytesseract.image_to_string(Image.open('jietu.jpg'))
text = ''.join(text.split())
return text
#百度识别
def orc_baidu():
text=get_question('jietu.jpg')
return text
status='y'
start = time.time()
result=get_point_txt(status)
for i in range(10):
window_capture(result,'jietu.jpg')
# text=orc_baidu()
text=orc_pic()
print(text)
#浏览器搜索
url = 'http://www.baidu.com/s?wd=%s' % text
webbrowser.open(url)
# url2='https://www.google.com/search?q=%s' % text
# webbrowser.open(url2)
end = time.time()
time=end-start
print('此次耗时%.1f秒' % time)
来源:http://blog.csdn.net/m0_37854650/article/details/79052911


猜你喜欢
- 简介时间序列数据表示一系列特定时间内的数据间隔.如果我们想在机器学习中构建序列预测,那么我们必须处理顺序数据和时间.系列数据是顺序数据的摘要
- 5月20日,微软正式提供了Windows XP下可用的雅黑字体下载,雅黑字体是一款近乎完美的字体,解决了宋体小文字无法辩认的问
- 每次写完的东西就忘了,下次用时还要重查资料重新写,这是今天写的一段测试代码,保留下来,记录给自已,同时分享给大家。目标:把下边的这个上传文件
- 前言网上的做法基本都是下面的代码return HttpResponseForbidden()试了一下,效果一般,没有异常页面显示,最终显示的
- 首先呢我去安装了一个那个pytorch,然后导入一下发现:连numpy都找不到,于是我表示很生气重新安装,它说安装过了,地址是balabal
- 前言Django提供了多种装饰器, 其中login_required可能是经常会使用到的。 这里介绍下四种使用此装饰器的办法。当然, 在使用
- 此篇文章整理新手编写代码常见的一些错误,有些错误是粗心的错误,但对于新手而已,会折腾很长时间才搞定,所以在此总结下我遇到的一些问题。希望帮助
- 1.私有属性和私有方法封装的意义:将属性和方法放到一起做为一个整体,然后通过实例化对象来处理;隐藏内部实现细节,只需要和对象及其属性和方法交
- 一. SQL2008卸载。1.从控制面板卸载1)点击计算机右下角“开始”,点击“控制面板”2)点击“卸载
- 有两种类型的回调函数:blocking callbacks (also known as synchronous callbacks or
- 目录一 项目描述1.1 背景1.2 实现设计1.2.1 之前的方法1.2.2 优化后的方法二.实现详情2.1 编辑Python可执行文件2.
- 该程序通过绘制树干(最初是树;后来是树枝)并递归地添加树来绘制“树”。 使用Pillow。利用递归函数绘制分形树(fractal tree)
- 条形图(bar chart),也称为柱状图,是一种以长方形的长度为变量的统计图表,长方形的长度与它所对应的变量数值呈一定比例。1. 竖放条形
- 1.切片# 切片:取list或tuple的部分元素nameList = ["Willard","ChenJD&
- \\create by ahuinan 2009-6-22 \\up by ahuian 2009-6-23 \\up by ahuinan
- 应用场景:实验中不断得到新数据,想将数据图形化,但随着时间推移,数据越来越多,此时需要我们等距选择数据列表中固定数量的数据,来进行图形化。注
- 如果直接从生成验证码的页面把验证码下载到本地后识别,再构造表单数据发送的话,会有一个验证码同步的问题,即请求了两次验证码,而识别出来的验证码
- 有时候我们的数据是按某个频率收集的,比如每日、每月、每15分钟,那么我们怎么产生对应频率的索引呢?pandas中的date_range可用于
- 一、前言相关知识来自《python算法设计与分析》。初级排序算法是指几种较为基础且容易理解的排序算法。初级排序算法包括插入排序、选择排序和冒
- 上一篇文章Python中schedule模块关于定时任务使用方法1 设置时间间隔随机数在有一些场景下,为了模拟比较自然的情景,需要采用随机的