前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >新手篇之实现Python自动搜题

新手篇之实现Python自动搜题

作者头像
TTTEED
发布2020-07-09 11:18:28
2.2K0
发布2020-07-09 11:18:28
举报

承接前文关于Python自动搜题的介绍https://zhuanlan.zhihu.com/p/32828411,此篇面向新手小白进行解析,助你成功运行自动搜题的python程序。

A部分是介绍思路,可以先跳到B部分去下载包,装中文包时耗时蛮长,可以再来细看A部分~

A 思路:如前文所述,代码大致分三步。

1. 获取手机直播答题界面截图

注意:我们这里只关注题目,不管选项,通过搜索题目内容获取辅助线索,所以截图我们只定位在显示题目的位置就足够了,这样图片中读取文字的速度快精度也高一些,例如中午1点直播答题测试时截图第六题:

2. 读取截图中的题目文字内容

这里我们在shell处将读取到的题目内容输出展示,同时也显示代码耗时:

3. 打开浏览器执行对题目搜索

单论每一步,实现方法有很多,但考虑到时间,我们只选取耗时尽量少的方法来实现各部分功能。经过1月11日中午1点百万英雄直播答题时的测试,网络良好时,搜完结果剩余答题时间仍有5秒,完全达到预期效果(但由于中午醉心于搜索、录影,忘了答题了,一心不可二用啊T.T)

B 下载相关功能包:由于我也算是刚入门的新手,基本各种功能模块都是按着搜来的网上教程来的,所以大家只要能保证各个模块都配好,最终程序跑通还是不难的。

执行代码时,我用的是Windows10系统电脑,Python3.6,安卓手机数据线连电脑。

1. 无论什么手机、电脑系统,要做的是实现把手机屏幕内容实时显示在电脑屏幕上,我是用的360手机助手的'演示'功能完成了对安卓和windows的连接,其余型号手机电脑可以自己搜一下来解决。

2. 接下来我们通过电脑截屏来实现截取屏幕上手机直播内容,由于Windows API获取截图的耗时极少,我们选择了它。这里win10是不用额外下载东西,但可能Win7或其它版本的Windows会遇到找不到win32gui情况,可以参考win7下安装python库的若干问题 - CSDN博客 来解决。关于windows通过python截屏函数,参考Python实现屏幕截图的两种方式 - weiyinfu - 博客园

3. 拿到题目的截图后,要完成对题目中文字的读取,就需要安装PIL和pytesseract,同时还需要简体中文识别的引擎包tesseract-ocr,相关安装检测参考链接:Python人工智能之图片识别,Python3一行代码实现图片文字识别 - 邱石的专栏 - CSDN博客 注意:安装引擎包时最好按照链接中保存到C盘相似的路径,我和朋友安到E盘都有报错,也没搞清具体原因,把文件剪切到C盘就解决了。

4. 打开浏览器的时webbrowser模块,自带不用下载。

C 接下来是校准工作,调整代码中w,h值来改变截图大小,(20,140)处的两个值改变截图初始位置坐标,对应着你个人手机屏幕在电脑屏幕中的显示位置,调整以上的值使截图恰好落在手机屏上直播时显示题目的位置。

D 代码解析

def window_capture(filename): hwnd = 0 hwndDC = win32gui.GetWindowDC(hwnd) mfcDC = win32ui.CreateDCFromHandle(hwndDC) saveDC = mfcDC.CreateCompatibleDC() saveBitMap = win32ui.CreateBitmap() MoniterDev = win32api.EnumDisplayMonitors(None,None) #此处w为截图宽度,h为截图高度 #下面的#w=...和#h=...都是链接中源代码对其赋值,获取电脑截屏的宽和高 #w = MoniterDev[0][2][2] #h = MoniterDev[0][2][3]

#我针对自己手机的屏幕大小以及显示题目的位置重新对其设置

w = 380 h = 150 saveBitMap.CreateCompatibleBitmap(mfcDC,w,h) saveDC.SelectObject(saveBitMap) #(20,140)为截图左上角点的坐标,可以根据自己手机屏幕在电脑屏幕上的位置调整 saveDC.BitBlt((0,0),(w,h),mfcDC,(20,140),win32con.SRCCOPY) saveBitMap.SaveBitmapFile(saveDC,filename)

#获取代码执行开始时间

start = time.time()

#获取截图'haha.jpg'

for i in range(10):

window_capture('haha.jpg')

#解析截图中的文本,注意这里text是'你 好 吗'中间带

text=pytesseract.image_to_string(Image.open('haha.jpg'),lang='chi_sim')

#去除字符串中间的空格

list =''.join(text.split()) print(list)

#将题目内容作为搜索关键词加到百度网址 url = 'http://www.baidu.com/s?wd=%s' % list

#通过浏览器打开搜索结果界面

webbrowser.open(url)

#计算代码执行时间

end = time.time() print(end-start)

E 直播实测

视频内容
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 TTTEED 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档