油猴脚本 之 网教通自动签到

动机

疫情期间,天天都有网教通的在线直播课。上课之前经常在做别的事(比如作业之类的),奈何老师喜欢提早点名,直播又有延迟,导致老师说要点名的时候,点名框已经消失了。

于是我就有了写自动签到脚本的念头。

思路

基本情况是:在老师点名的时候,页面上会出现一个弹窗div,上面有写“主播正在点名”,还有一个按钮,另外弹窗只会出现 50 秒,上面会有倒秒,若 50 秒内未签到你就凉了。

既然是网页端的东西,考虑用油猴 JS 脚本实现。油猴插件时什么我就不用多说了吧,不懂的自行百度。

在老师点名的时候,我把这部分弹窗的 HTML 代码给复制了下来:

<div tabindex="-1" class="ant-modal-wrap ant-confirm ant-confirm-info frPuEmWQME" role="dialog">
    <div role="document" style="width:520px;" class="ant-modal">
        <div class="ant-modal-content">
            <div class="ant-modal-body">
                <div class="ant-confirm-body">
                    <i class="anticon anticon-info-circle"></i>
                    <span class="ant-confirm-title">主播正在点名,倒计时</span>
                    <div class="ant-confirm-content">
                        <p>
                            <mark>27</mark>
                            <span>秒</span>
                        </p>
                    </div>
                </div>
            </div>
            <div class="ant-modal-footer">
                <button type="button" class="ant-btn ant-btn-ghost ant-btn-lg">
                    <span>取 消</span>
                </button>
                <button type="button" class="ant-btn ant-btn-primary ant-btn-lg">
                    <span>签 到</span>
                </button>
            </div>
        </div>
        <div tabindex="0" style="width:0;height:0;overflow:hidden;">sentinel</div>
    </div>
</div>

那么事情就很清晰了。我们只要在这个元素出现的时候,找到这个签到按钮,然后 .click() 模拟点击一次就可以了。

基本思路是,设一个定时器,每几秒看一下有没有这个div,如果有的话就按下这个类名为 ant-btn-primary 的 button。

另外需要注意的是:如果出现其他问题(虽然我一次都没有遇到过),这个弹窗不是点名框怎么办?

所以需要再进行一次判断,看这个 <span class="ant-confirm-title">主播正在点名,倒计时</span> 的 innerHTML 是不是“主播正在点名,倒计时”。

程序实现

话不多说,直接上代码。

// ==UserScript==
// @name         网教通自动签到
// @namespace    https://www.cnblogs.com/henrylin/
// @version      0.1
// @description  网教通自动签到
// @author       林洪平
// @match        *://web-live.sdp.101.com/*
// @grant        none
// ==/UserScript==

(function () {
    'use strict';
    setInterval(function () {
        if (document.querySelector('.ant-confirm-title') && document.querySelector('.ant-confirm-title').innerHTML == '主播正在点名,倒计时') document.querySelector('.ant-confirm.ant-confirm-info .ant-btn-primary').click();
    }, 3000);
})();

短短 9 行解决问题,爽啦!

运行效果

免责声明

仅供学习参考,不作他用,请全程认真听讲!

posted on 2020-04-21 11:07  Henrylin666  阅读(1143)  评论(3编辑  收藏  举报

导航

回到首页