为了偷懒,居然干了这种事!
文字 | 配图 | 排版 | ?老Y
官网:www.youquhome.cn
关键是视频真的很多很长,而且视频内容怎么说呢,不能说没有用处,只能说用处不大,要按这个要求得浪费很长时间(完全不符合摸鱼的性格啊
)
这个验证码功能,真是很让人无语。。都知道没什么人看,还要逼着大家守在电脑前做算数题。
但这个“小问题”能难得住摸鱼小能手老Y么?怎么着也得想点办法,说干就干
老Y迅速厘清了解题思路:视频倍速+验证码自动计算,这里也在这里分享下老Y的经验,希望能给遇到同样困难的小伙伴们一点点灵感
一、视频倍速
这个问题其实老Y之前也介绍过,基本上大部分网页上的视频都可以在浏览器中通过javascript直接进行倍速播放的,方法也很简单,只需要一行代码。这里讲下具体操作步骤。
1、在浏览器中打开一个空白网页,收藏这个空白网页(如果连收藏网页都不会,建议去百度一下)。
2、如下图,对收藏的网页书签进行修改,名称栏自己定,在网址一栏中,输入下面“一串字母”,最后的数字就是视频几倍速度播放,老Y默认写的10倍。
javascript:document.querySelector('video').playbackRate=10
3、打开播放视频的界面,在收藏栏中找到刚刚收藏的这个空白网页,直接点击就可以实现视频倍速播放了。
看了下效果还是很喜人的。
至此,视频倍速问题解决,其实到了这里,已经能节省很多时间了,但追求完美的老Y怎么能放任那几分钟就跳出来的验证码呢?,这不是逼死强迫症患者么?
于是想起了除了不能生孩子,啥都能做的python
二、验证码自动计算
由于代码能力羸弱,于是在百度了好久之后,想到了一个最简单的方法,各种ctrl c,ctrl v后,不是很优雅的实现了,思路是这样的(附上代码,大家将就着看)。
1、判断验证码是否跳出
一般验证码跳出,视频就会暂停,而暂停后电脑系统就没有声音了,所以老Y就是利用电脑系统声音是否暂停来判断。
方法是截取5秒系统的声音,判断下是否有声音,当声音大于200分贝(这个阈值大家自己定)即说明有声音,用到pyaudio库。
def video():
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16,
channels=2,
rate=44100,
input=True,
frames_per_buffer=1024)
# 截取5秒监测是否有声音播放
for i in range(0, 5):
data = stream.read(1024)
audio_data = np.fromstring(data, dtype=np.short)
temp = np.max(audio_data)
time.sleep(1)
if i >= 2 and temp >= 200:#从第二秒开始判断声音是否大于200分贝
return True
# 监测5秒结束,没有监测到当前电脑设备有音频正在播放
stream.stop_stream()
stream.close()
p.terminate()
return False
2、验证码识别和计算
思路是这样的,找到验证码在屏幕出现的位置→截图→调用python验证码识别库(ddddocr)识别截图数字→计算→将结果填入→按Enter(键盘鼠标操作用到pyautugui库)
2.1关于屏幕的位置坐标,其实许多截图工具都是自带显示屏幕具体坐标位置的,比如老Y推荐过的Snipaste、FsCapture等。
找到验证码在屏幕中的两个点的坐标(x1,y1)(x2,y2),以及输入答案的位置(x3,y3),如下图所示。
2.2验证码截图、识别和计算。
图像截图用到的是PIL库,验证码识别用到的第三方库ddddocr,python操作键盘用到是pyautogui库,这几个库都是很好用的。代码如下。
bbox = (x1,y1,x2,y2)
im = ImageGrab.grab(bbox)
im.save('C:\yzm.png')
#识别
ocr = ddddocr.DdddOcr()
with open('C:\yzm.png', 'rb') as f:
img = f.read()
f.close()
res = ocr.classification(img)
res = res.split('=')[0]
#计算因为只有+-*/if'+'in res:
zhi = int(res.split('+')[0])+int(res.split('+')[1])
if'-'in res:
zhi = int(res.split('+')[0])-int(res.split('+')[1])
if'*'in res:
zhi = int(res.split('+')[0])*int(res.split('+')[1])
if'/'in res:
zhi = int(res.split('+')[0])/int(res.split('+')[1])
#操作鼠标和键盘,输入答案,按enter
pyautogui.moveTo(x3,y3)
pyautogui.click()
pyautogui.typewrite(message=str(zhi), interval=0.5)
pyautogui.press('enter')
代码还有不少bug老Y也懒得改了,需要的可以自行下载。
下载地址:
https://ilaoygzs.lanzouv.com/i0Q220dsb31c
当老Y忙活了好几天写好了这个小工具,发现别人其实都已经学完了
老Y在忙活这个小工具时,想思路,一句句查代码,查语法,到最终实现功能,这个学习的过程要远比看这几个视频充实多了。而做好软件后,快速的学完培训视频反而变得索然无味。
突然发现,老Y真正在乎的往往并不是快速学完视频的这个结果,而是整个学习忙碌的过程。
– End –
文章转载自微信公众号:老Y工作室