动机
疫情期间,天天都有网教通的在线直播课。上课之前经常在做别的事(比如作业之类的),奈何老师喜欢提早点名,直播又有延迟,导致老师说要点名的时候,点名框已经消失了。
于是我就有了写自动签到脚本的念头。
思路
基本情况是:在老师点名的时候,页面上会出现一个弹窗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 行解决问题,爽啦!
运行效果
免责声明
仅供学习参考,不作他用,请全程认真听讲!