按键精灵做一个乐宁自动学习

    xiaoxiao2022-06-23  201

    在乐宁报名考试后,要参加在线学习, 上百个课时, 很多视频都是看过 或者没有什么用的,所以还是做了一个自动学习。

    由于乐宁改版,这次这个自动学习 弄了一下午,还是 有点难度的 分享给大家。

    1.先考虑用按键精灵自带的浏览器,做表单元素抓取,很可惜在视频播放的页面不兼容,吐槽一下按键精灵,2014后没有再更新过了。

    //直接打开学习列表 RunApp "http://lening100.com/userStudy!listTrainCourse.action?xxx Hwnd = Plugin.Window.Foreground() TracePrint Hwnd //激活最大窗口 Call Plugin.Window.Active(Hwnd) Call Plugin.Window.Max(Hwnd)

    2.没办法用元素,就只能前台抓取默认浏览器了,我笔记本装的是360急速,为了快速完成工具,我就没有做登录和句柄抓取,都是提前登录好,句柄直接定义好。

    抓取页面的链接,这个很简单了,直接前台模拟查看源代码,然后正则匹配一下列表,把所有课程链接匹配出来,这中级也要比对一下学习进度,num就是页面中的学习进度,0到99的是没学习完,链接有效。

    //抓取课程: content = copycode() TracePrint content ul = Split(content, "<ul class=""list_show center-list-tab"">") TracePrint ubound(ul) for i=1 to ubound(ul) str = ul(i) num=regval(str," value=""(\d+)""") If num >= 0 < 100 Then link = regval(str, "<a href=""(.+?)"">") gotolink( "http://lening100.com/"&link) End If Next

    3.进入课程后,又是一个列表,做法和上一部一样,正则匹配出来有效链接。

    '跳转链接 Function gotolink(link) RunApp link content = copycode() tr = Split(content, "<tr>") TracePrint ubound(tr) for i=1 to ubound(tr) str = tr(i) num=regval(str," value=""(\d+)""") If int(num) >= 0 and int(num)< 100 Then link = regval(str, "<a href=""(.+?)"" target") RunApp ("http://lening100.com/" & link) times=gettime() End If Next Delay 1000 KeyDown 17, 1 KeyPress 87, 1 KeyUp 17, 1 gotolink=1 End Function

    4.进入视频播放学习界面,这部有些麻烦,也是唯一的难点,就是无法获取到视频的真实播放时间,头几年乐宁在列表页就标注好了视频的总时间和已学习时间,这次没有,要是抓取视频显示的时间很麻烦,位置不确定,准确度不高。

    5.最后找了一下,发现一个思路是前台抓音频状态,这个可以 提前抓取好音频框的颜色,为了保证准确性做了10次循环 判断。

     

    '获取声音 Function getsecond() t=0 Do While t < 10 Delay 5000 //取窗口句柄(变量:Volume)窗口的客户区(坐标:83, 283)处的颜色 GetColor = Plugin.Bkgnd.GetPixelColor(Volume, 6, 127) TracePrint GetColor if GetColor= "EAEAE7 " then t = t + 1 Else t=0 End if getsecond=t //退出循环 Loop End Function

    6.虽然程序还是有时不太稳定,受网络波动影响,也不能后台执行,但如果投入更多精力去做工具就失去偷懒的意义了。

    将代码片段分享给大家,有经验的同学,按照我的思路和代码很快就可以做好的。

    7.总结一下,按键精灵虽然功能较弱,对硬件和底层调用能力太弱,也不能 对网络数据进行处理,但对于重复性,简单的需求,它还是最快的解决工具之一。

    '比对时间,没声就关闭页面 Function gettime() allsecond= getsecond() If allsecond > 9 Then Delay 1000 KeyDown 17, 1 KeyPress 87, 1 KeyUp 17, 1 End If gettime=allsecond End Function '复制源码,就是复制到剪切板 Function copycode() Delay 2000 KeyDown 17, 1 KeyPress 85, 1 KeyUp 17, 1 Delay 500 KeyDown 17, 1 KeyPress 65, 1 KeyUp 17, 1 Delay 500 KeyDown 17, 1 KeyPress 67, 1 KeyUp 17, 1 Delay 500 copycode = Plugin.Sys.GetCLB() Delay 500 KeyDown 17, 1 KeyPress 87, 1 KeyUp 17, 1 End Function

     


    最新回复(0)