目标
- 在μ信的某页面内找到某位专家/某天的预约按钮,如果是查看(有剩余)则提示有剩余(此处为放音乐);否则刷新重复之前的判断
注:某μ信链接在此
实现
分析
判断某个控件的文本是不是查看
如果是则播放音乐
如果不是则,等待几秒刷新,循环
尝试
分析可行性和方案选择
μ信的登录认证,可以用抓包的方式绕过检测
只适用于本人,弃之。
可以用脚本或是
辅助功能
进行判断效率太低,弃之。
因为是纯页面,x5内核,使用Chrome进行远程调试然后使用console进行注入
操作不是特别复杂(相对来说。。。)对方也有一定的基础,因此使用该方法。
环境搭建
参考简书的帖子
有几个需要注意的
- host一定要修改,否则可以选择“正确的上网姿势”(挂μpη)
- adb一定要打开(wifi的不稳定,个人观点),如果不会,可以搜索
xxx手机连接adb
- 理论上Chrome内核的浏览器都行,不过还是Chrome调试最香
实现(超详细)
此部分需要有一定js基础或是其他语言的基础
原理已经分析过了
通过Chrome的远程调试μ信的x5内核页面,实现注入js
但是当网页刷新后原来注入的js就会失效。
为了解决这个问题,我使用在当前网页新建iframe
的方式
(或许有更好的方法。欢迎回复讨论。。。。)
iframe外层框架
主页面只作为一个容器,对iframe进行刷新,并且响应onload事件
主代码在onload响应中实现。
外层框架如下
var url = location.href;var tmp = document.createElement("iframe");tmp.id = 'loginframe';tmp.src = url;tmp.style = "width: 100%;height: 100%;";$("body").innerHTML = ""$("body").append(tmp);$("#loginframe").onload = function() {//iframe响应事件,//判断+刷新/音频提示}
onload响应
使用元素审查很容易找到元素,
这里我选择的是元素选择器
(PS图是后配的。。。可能和原来的不一样。。。)
示意图嘛~意会即可
注:一下的括号内的除了强行解释就是本人在编辑帖子的时候想到的方法。。。。
因为是操作子iframe,因此没选用jQuery
(其实是我不会。。。。)
参数没有使用全局变量,使用的url带参数(为了节省内存。。。。全局变量不会释放。。)
(好吧其实是当时没想到。。。)
因为网页是动态加载的(没去分析js、没抓包。。。。知道可以用ajax。。。。没想用,那样太简单了),因此加了
try
和catch
捕捉异常然后定时器循环好吧其实又是没想到
成果
把变量提出来仍在最前面,方便金主(这么称呼没毛病吧233333)修改
代码实现:
var waite4time=1000;//每次等待时间,单位:msvar MAX_waittingTimes=0;//最大等待次数,为0则无限制var musicURL="https://cdn.calm.com/scenes/scene-Qqkzy9k7Eo.m4a";//音乐直链//=========以上是配置======================var url = location.href;var tmp = document.createElement("iframe");tmp.id = 'loginframe';tmp.src = url;tmp.style = "width: 100%;height: 100%;";$("body").innerHTML = ""$("body").append(tmp);$("#loginframe").onload = function() { var that = this; var url_sign = that.src.match(/tao_auto_refresh_time=\d+/g); var waitingTimes = Number((url_sign == null) ? 0 : url_sign[0].match(/\d+/g)[0]); if (++waitingTimes >= MAX_waittingTimes && MAX_waittingTimes) { return; } var fuck_Marquee_interval = setInterval(function() { try { document.getElementById('loginframe').contentWindow.document.querySelector("body > div.b_con > div > div.content > div").innerHTML = "这是第" + (waitingTimes) + "次尝试"; document.getElementById('loginframe').contentWindow.document.querySelector("body > div.b_con > div > div.content > div").style = "color:red;font-size:40px"; document.getElementById('loginframe').contentWindow.document.querySelector("body > div.b_con > div > div.content > ul > li:nth-child(4) > div > div > div.ivu-collapse-content > div > ul:nth-child(3) > li > div.but").innerHTML == "查看" || document.getElementById('loginframe').contentWindow.document.querySelector("body > div.b_con > div > div.content > ul > li:nth-child(4) > div > div > div.ivu-collapse-content > div > ul:nth-child(4) > li > div.but").innerHTML == "查看" ? (console.log("有空位 了!!"), tmp = document.createElement("audio"), tmp.id = 'success_a', tmp.src = musicURL, document.getElementsByTagName("body")[0].append(tmp), document.getElementById('success_a').play()) : setTimeout(function() { that.src = that.src.indexOf("tao_auto_refresh_time") > -1 ? (that.src.replace(new RegExp("tao_auto_refresh_time=\\d+", 'g'), "tao_auto_refresh_time=" + waitingTimes)) : (that.src + (that.src.indexOf("?") > -1 ? "&" : "?") + "tao_auto_refresh_time=" + waitingTimes); }, waite4time ? waite4time : 60000); clearInterval(fuck_Marquee_interval); } catch (e) { } }, 10);}
(MP4直链)部分浏览器/插件会自动下载。。。这个我也很无奈。。。
最后就是最关键的环节
ps,上述图片中的二维码为打赏码,欢迎打赏(PS:支持各种支付方式,如果想用btc或是其他支付平台的可以私我)
我也就说说。。。。有谁会打赏呢。。。。。
声明:本站所有资源均由网友分享,如有侵权内容,请在文章下方留言,本站会立即处理。