python自动答题免费_直播答题?Python助你自动搜题之新手篇!
承接前文關于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獲取截圖的耗時極少,我們選擇了它。由于Python沒有自帶訪問windows系統API的庫,需要下載pywin32庫來實現,pip 安裝的命令是: pip install pypiwin32(注意安裝時是pypiwin32,不是pywin32)。這里關于windows通過python截屏函數,參考Python實現屏幕截圖的兩種方式 - weiyinfu - 博客園
3. 拿到題目的截圖后,要完成對題目中文字的讀取,就需要安裝PIL和pytesseract,同時還需要簡體中文識別的引擎包tesseract-ocr,相關安裝檢測參考鏈接:Python人工智能之圖片識別,Python3一行代碼實現圖片文字識別 - 邱石的專欄 - CSDN博客 注意:安裝引擎包時最好按照鏈接中保存到C盤相似的路徑,我和朋友安到E盤都有報錯,也沒搞清具體原因,把文件剪切到C盤就解決了。另外,請官方下載最新版或者通過我這網盤分享的4.0.0版本的,鏈接中的版本有點低,準確率也較差https://pan.baidu.com/s/1bpVvjUB
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 = MoniterDev[0][2][2]
#h = MoniterDev[0][2][3]
#我針對自己手機的屏幕大小以及顯示題目的位置重新對其設置
w = 380
h = 150
saveBitMap.CreateCompatibleBitmap(mfcDC,w,h)
saveDC.SelectObject(saveBitMap)
#here的正下方(20,140)是截圖的起點坐標來定位截圖位置,這些根據個人情況調整
#--------------------------------here--------------------
saveDC.BitBlt((0,0),(w,h),mfcDC,(20,140),win32con.SRCCOPY)
saveBitMap.SaveBitmapFile(saveDC,filename)
#獲取開始執行代碼的時間
start = time.time()
#獲取截圖為'haha.jpg'
window_capture('haha.jpg')
#識別截圖中的簡體中文
text=pytesseract.image_to_string(Image.open('haha.jpg'),lang='chi_sim')
#識別的字符串是'你 好 嗎'帶空格的格式,這里去除這些空格生成新的字符串list即題目內容
new_text =''.join(text.split())
print(new_text)
#將題目內容作為搜索關鍵詞加到百度搜索的網址
url = 'http://www.baidu.com/s?wd=%s' % new_text
#打開瀏覽器獲取搜索結果
webbrowser.open(url)
#獲取代碼結束時的時間
end = time.time()
#計算代碼執行時間,搜索結果出現的時間還要取決于網絡狀況。。。
print(end-start)
E 直播答題實測:
文中提到的第六題:
https://www.zhihu.com/video/934868742274408448
代碼功能介紹:
https://www.zhihu.com/video/935150865682132992
成功的第一題:
https://www.zhihu.com/video/935149969132904448
忘記答題的第二題:
https://www.zhihu.com/video/935150275946283008
徹底GG的第三題:
https://www.zhihu.com/video/935151057739374592
希望當你看到這里時,能夠成功運行代碼咯~ 有問題可以留言,或者關注公眾號TEDxPY留言,希望能認識更多喜歡Python的朋友~!
補充:
1.本代碼只是簡化百度搜索題目的過程,美其名自動搜題,只作答題參考,有優化的想法歡迎來建議。
2.代碼運行后,文件夾中會生成截圖圖片,可以根據圖片內容去調整代碼中關于截圖位置、大小的設置,百萬英雄的題目是白底黑字,只要截圖準確,一般精確度都很高的。
3.為了方便答題時運行代碼,可以用python自帶的IDLE打開py文件置于屏幕下方,出題目時在py文件上按F5運行即可跳出瀏覽器界面;同時提前打開好瀏覽器,調整好位置,避免答題時跳出的窗口擋住手機屏幕位置影響截圖。
4.關于win32模塊,謝謝評論提醒,并不是因為win10系統自帶,而是我之前運行其它程序時預裝過pypiwin32,所以如果找不到win32的模塊,可以pip install pypiwin32
5.關于OCR版本,版本低的話可能準確度比較差,這里提供4.0.0版本的安裝文件,別用鏈接里的版本了https://pan.baidu.com/s/1bpVvjUB 抱歉哈
總結
以上是生活随笔為你收集整理的python自动答题免费_直播答题?Python助你自动搜题之新手篇!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win7输入法图标不见了怎么办
- 下一篇: python集合操作 读取_python