为了偷懒,居然干了这种事!

为了偷懒,居然干了这种事! 最新 图1张

文字 | 配图 | 排版 | ?老Y

官网:www.youquhome.cn


hello大家好,这里是日常爆肝更新的老Y工作室。

今天不教大家摸鱼了,给大家分享老Y最近的一次摸鱼经历(这不还是教大家摸鱼么?为了偷懒,居然干了这种事! 最新 图2张

事情的缘起是这样的,最近老Y由于工作要求又开始了视频培训,视频必须学完才有积分,视频没有倍速播放按钮,不能快进。而且视频播一段就会跳出个计算验证码,回答正确,才能继续播放,类似下面的。


为了偷懒,居然干了这种事! 最新 图3张

关键是视频真的很多很长,而且视频内容怎么说呢,不能说没有用处,只能说用处不大为了偷懒,居然干了这种事! 最新 图2张,要按这个要求得浪费很长时间(完全不符合摸鱼的性格啊为了偷懒,居然干了这种事! 最新 图5张


这个验证码功能,真是很让人无语。。都知道没什么人看,还要逼着大家守在电脑前做算数题为了偷懒,居然干了这种事! 最新 图6张


但这个“小问题”能难得住摸鱼小能手老Y么?怎么着也得想点办法,说干就干为了偷懒,居然干了这种事! 最新 图2张


老Y迅速厘清了解题思路:视频倍速+验证码自动计算为了偷懒,居然干了这种事! 最新 图2张,这里也在这里分享下老Y的经验,希望能给遇到同样困难的小伙伴们一点点灵感为了偷懒,居然干了这种事! 最新 图9张


一、视频倍速 


这个问题其实老Y之前也介绍过,基本上大部分网页上的视频都可以在浏览器中通过javascript直接进行倍速播放的,方法也很简单,只需要一行代码。这里讲下具体操作步骤。


1、在浏览器中打开一个空白网页,收藏这个空白网页(如果连收藏网页都不会,建议去百度一下为了偷懒,居然干了这种事! 最新 图10张)。


2、如下图,对收藏的网页书签进行修改,名称栏自己定,在网址一栏中,输入下面“一串字母”,最后的数字就是视频几倍速度播放,老Y默认写的10倍。


javascript:document.querySelector('video').playbackRate=10
左右滑动


为了偷懒,居然干了这种事! 最新 图11张

3、打开播放视频的界面,在收藏栏中找到刚刚收藏的这个空白网页,直接点击就可以实现视频倍速播放了。


为了偷懒,居然干了这种事! 最新 图12张

看了下效果还是很喜人的。

为了偷懒,居然干了这种事! 最新 图13张

至此,视频倍速问题解决,其实到了这里,已经能节省很多时间了,但追求完美的老Y怎么能放任那几分钟就跳出来的验证码呢?为了偷懒,居然干了这种事! 最新 图14张,这不是逼死强迫症患者么?为了偷懒,居然干了这种事! 最新 图2张


于是想起了除了不能生孩子,啥都能做的python为了偷懒,居然干了这种事! 最新 图16张


二、验证码自动计算 


由于代码能力羸弱,于是在百度了好久之后,想到了一个最简单的方法,各种ctrl c,ctrl v后,不是很优雅的实现了,思路是这样的(附上代码,大家将就着看为了偷懒,居然干了这种事! 最新 图17张)。


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(05):
      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等。


为了偷懒,居然干了这种事! 最新 图18张


找到验证码在屏幕中的两个点的坐标(x1,y1)(x2,y2),以及输入答案的位置(x3,y3),如下图所示。


为了偷懒,居然干了这种事! 最新 图19张


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')
左右滑动

然后就是加一个循环,让程序每隔1分钟扫描下系统声音就行了,老Y为了方便,就给程序加了一个壳子,然后打开倍速,打开验证码自动识别计算为了偷懒,居然干了这种事! 最新 图6张

为了偷懒,居然干了这种事! 最新 图21张

代码还有不少bug老Y也懒得改了,需要的可以自行下载。

下载地址:

https://ilaoygzs.lanzouv.com/i0Q220dsb31c


当老Y忙活了好几天写好了这个小工具,发现别人其实都已经学完了为了偷懒,居然干了这种事! 最新 图2张


老Y在忙活这个小工具时,想思路,一句句查代码,查语法,到最终实现功能,这个学习的过程要远比看这几个视频充实多了。而做好软件后,快速的学完培训视频反而变得索然无味。


突然发现,老Y真正在乎的往往并不是快速学完视频的这个结果,而是整个学习忙碌的过程。



为了偷懒,居然干了这种事! 最新 图23张


– End –

为了偷懒,居然干了这种事! 最新 图24张


文章转载自微信公众号:老Y工作室