1 网上自动看视频、自动考试----检测是否看完视频

有些公务员,党员,事业单位人员,会计行业,金融行业,建筑行业等,按要求每年必须要网上看一些学习类的视频,或者做一些题目,大部分都是形式,没有什么用处。我就是其中一类,为了不烂费时间,用python以及一些支持包实现该功能。分为以下几个部分

1 网上自动看视频、自动考试----检测是否看完视频

2 网上自动看视频、自动考试----观看视频中是否要做题

3 网上自动看视频、自动考试----选择下一课程

4 网上自动看视频、自动考试----视频异常处理

5 网上自动看视频、自动考试----基本函数


1 网上自动看视频、自动考试----检测是否看完视频

1 视频播放完了后一般会有提示,如下图:

图1

2 为了检测到完成学习,首先截屏

from PIL import ImageGrab
# 抓取屏幕(截屏),bbox为截取屏幕区域的设置,name为把截屏图像保存的名称,方便调试
def getScreen(bbox = (0,0,1366,768),name='random_grab'):
    img = ImageGrab.grab(bbox)
    img.save("resource/"+name+".jpg")
    return img

3 在对截屏的内容进行检查,通过匹配如下图像

图2

这里使用opencv的模板匹配,

import cv2 #导入opencv包
# 找到模板是否存在,以及存在的话,返回在图片中的位置
def findPos(img,template,calledby = 'unknown',threshold=0.005, method='cv2.TM_SQDIFF_NORMED'):
    print('come to find template pos function called by '+calledby)
    match_result = 0
    w,h = template.shape[::-1]
    click_pos=[0,0]    
    res = cv2.matchTemplate(img,template,eval(method))
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
    top_left = min_loc
    # threshold如果检测的匹配度小于给定值,就匹配成功
    if min_val < threshold: 
        match_result=1
        click_pos = [top_left[0] + w//2, top_left[1] + h//2]
    print(calledby,' min_val:',min_val,'   max_val:',max_val)
    return match_result,click_pos
img为截图,template为要找的图2,calledby用记录被哪个函数调用,方便调试,threshold匹配度,越小精度越高,method为模板匹配方式,具体参考openc参数说明



4 如果找到则点击确定

图3

点击坐标,由上面的函数给出

match_result,click_pos = findPos(img,template)
x = click_pos[0]
x = click_pos[1]
import win32api
import win32con
# 模拟鼠标点击
def click(x,y):#第一种
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
    time.sleep(0.1)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)




这样就完成了一个课程的学习了。


5 返回课程列表

如果你所看的课程没有放回课程列表,则使用上面的findPos函数和click函数,点击相应的按钮,方法步骤参考以上



没有更多推荐了,返回首页