python实现百万答题自动百度搜索答案


Posted in Python onJanuary 16, 2018

用python搭建百万答题、自动百度搜索答案。

使用平台

windows7
python3.6
MIX2手机

代码原理

手机屏幕内容同步到pc端
对问题截图
对截图文字分析
用浏览器自动搜索文本

使用教程

1、使用Airdroid 将手机屏幕显示在电脑屏幕上。也可使用360手机助手实现。不涉及任何代码。实现效果如图:

python实现百万答题自动百度搜索答案

2、在提问出现时,运行python程序,将问题部分截图。

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)

运行后截图如下

python实现百万答题自动百度搜索答案

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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python高级应用实例对比:高效计算大文件中的最长行的长度
Jun 08 Python
详解Python设计模式编程中观察者模式与策略模式的运用
Mar 02 Python
python字符串连接方法分析
Apr 12 Python
Python的socket模块源码中的一些实现要点分析
Jun 06 Python
python多进程和多线程究竟谁更快(详解)
May 29 Python
Python利用itchat对微信中好友数据实现简单分析的方法
Nov 21 Python
用 Python 连接 MySQL 的几种方式详解
Apr 04 Python
django解决跨域请求的问题
Nov 11 Python
Python进阶之自定义对象实现切片功能
Jan 07 Python
Python流程控制 if else实现解析
Sep 02 Python
python线程里哪种模块比较适合
Aug 02 Python
PyTorch 导数应用的使用教程
Aug 31 Python
Python数据结构之双向链表的定义与使用方法示例
Jan 16 #Python
python+pillow绘制矩阵盖尔圆简单实例
Jan 16 #Python
Python面向对象编程之继承与多态详解
Jan 16 #Python
Python基于socket实现简单的即时通讯功能示例
Jan 16 #Python
python中将字典形式的数据循环插入Excel
Jan 16 #Python
python+tkinter编写电脑桌面放大镜程序实例代码
Jan 16 #Python
详解python函数传参是传值还是传引用
Jan 16 #Python
You might like
php命令行使用方法和命令行参数说明
2014/04/08 PHP
php一维二维数组键排序方法实例总结
2014/11/13 PHP
PHP使用NuSOAP调用Web服务的方法
2015/07/18 PHP
PHP编写RESTful接口的方法
2016/02/21 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
2020/01/26 PHP
JS中的构造函数详细解析
2014/03/10 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
js操作IE浏览器弹出浏览文件夹可以返回目录路径
2014/07/14 Javascript
JQuery EasyUI 加载两次url的原因分析及解决方案
2014/08/18 Javascript
node.js中的fs.writeFileSync方法使用说明
2014/12/14 Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
2015/07/29 Javascript
jQuery原理系列-css选择器的简单实现
2016/06/07 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
2016/11/22 Javascript
EasyUI学习之Combobox下拉列表(1)
2016/12/29 Javascript
JS实现列表页面隔行变色效果
2017/03/25 Javascript
基于es6三点运算符的使用方法(实例讲解)
2017/10/12 Javascript
Vue.js实现图片的随意拖动方法
2018/03/08 Javascript
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
Vue.js中使用Vuex实现组件数据共享案例
2020/07/31 Javascript
Python3中多线程编程的队列运作示例
2015/04/16 Python
Python对列表排序的方法实例分析
2015/05/16 Python
python算法演练_One Rule 算法(详解)
2017/05/17 Python
python之DataFrame实现excel合并单元格
2021/02/22 Python
dataframe设置两个条件取值的实例
2018/04/12 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
2019/01/17 Python
opencv 图像腐蚀和图像膨胀的实现
2020/07/07 Python
Python如何操作docker redis过程解析
2020/08/10 Python
python使用建议与技巧分享(二)
2020/08/17 Python
Staples美国官方网站:办公用品一站式采购
2016/07/28 全球购物
优秀少先队大队辅导员事迹材料
2014/05/04 职场文书
交通事故委托书范本精选
2014/10/04 职场文书
领导干部群众路线剖析材料
2014/10/09 职场文书
联谊活动总结范文
2015/05/09 职场文书
小学英语教师研修感悟
2015/11/18 职场文书
JavaScript数组reduce()方法的语法与实例解析
2021/07/07 Javascript
游戏《东方异文石:爱亚利亚黎明》正式版发布
2022/04/03 其他游戏