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 相关文章推荐
Flask SQLAlchemy一对一,一对多的使用方法实践
Feb 10 Python
在Linux系统上安装Python的Scrapy框架的教程
Jun 11 Python
Python实现递归遍历文件夹并删除文件
Apr 18 Python
Python贪吃蛇游戏编写代码
Oct 26 Python
pytorch cnn 识别手写的字实现自建图片数据
May 20 Python
python使用pdfminer解析pdf文件的方法示例
Dec 20 Python
python装饰器常见使用方法分析
Jun 26 Python
Django1.11配合uni-app发起微信支付的实现
Oct 12 Python
Python计算机视觉里的IOU计算实例
Jan 17 Python
Python基于yield遍历多个可迭代对象
Mar 12 Python
python中可以声明变量类型吗
Jun 18 Python
OpenCV灰度化之后图片为绿色的解决
Dec 01 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 socke 向指定页面提交数据
2008/07/23 PHP
Views rows style模板重写代码
2011/05/16 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
用JavaScript编写COM组件的步骤
2009/03/17 Javascript
JQuery this 和 $(this) 的区别
2009/08/23 Javascript
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
2012/01/04 Javascript
JQuery AJAX 中文乱码问题解决
2013/06/05 Javascript
js实现点击链接后延迟3秒再跳转的方法
2015/06/05 Javascript
JavaScript实现点击自动选择TextArea文本的方法
2015/07/02 Javascript
Javascript实现检测客户端类型代码封包
2015/12/03 Javascript
浅谈js函数中的实例对象、类对象、局部变量(局部函数)
2016/11/20 Javascript
JavaScript获取键盘按键的键码(参照表)
2017/01/10 Javascript
Node.js中的require.resolve方法使用简介
2017/04/23 Javascript
layui中layer前端组件实现图片显示功能的方法分析
2017/10/13 Javascript
JavaScript数据结构之双向链表定义与使用方法示例
2017/10/27 Javascript
将jquery.qqFace.js表情转换成微信的字符码
2017/12/01 jQuery
轻量级JS Cookie插件js-cookie的使用方法
2018/03/22 Javascript
浅析Vue实例以及生命周期
2018/08/14 Javascript
AngularJS修改model值时,显示内容不变的实例
2018/09/13 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
2020/12/01 Javascript
vue3.0中setup使用(两种用法)
2020/12/02 Vue.js
Vue与React的区别和优势对比
2020/12/18 Vue.js
JavaScript实现打字游戏
2021/02/19 Javascript
python操作MongoDB基础知识
2013/11/01 Python
python入门前的第一课 python怎样入门
2018/03/06 Python
解决Pandas to_json()中文乱码,转化为json数组的问题
2018/05/10 Python
python使用Matplotlib画饼图
2018/09/25 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
2019/01/14 Python
python实现tail -f 功能
2020/01/17 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
xxx同志考察材料
2014/02/07 职场文书
医院院务公开实施方案
2014/05/03 职场文书
医生爱岗敬业演讲稿
2014/08/26 职场文书
销售工作决心书
2015/02/04 职场文书