首先先说一说吐槽一下微信封闭的生态圈,除了开放给搜狗这个搜索引擎可以搜索微信公众号的 api 之外,几乎没有开放任何可以利用的 api ,固然这有其在安全方面的考虑,但是这就使得一些比较有趣的功能难以实现,例如机器人。而一些比较实用的功能又在官方垃圾客户端中没有实现。

需求

在 chrome 上了 web 版微信的基础上利用 chrome 自带的 console + javascript 实现 自动、循环、发送信息

施工

首先声明,我在事前并 没有 了解过 javascript 这种语言,一切都是通过善用搜索引擎来一步一步实现的,所以请各位看到这一篇文章的大佬们看到有什么不妥的地方欢迎在评论区指出。

网页源码 首先当然是登录网页版微信,顺手打开 F12 开发者工具,尝试着发送了几条信息,并在 network 选项卡里面观察了一下网页的活动,然后发现

<pre id="editArea" contenteditable-directive="" mm-paste="" class="flex edit_area ng-isolate-scope ng-pristine ng-valid" contenteditable="true" ng-blur="editAreaBlur($event)" ng-model="editAreaCtn" ng-click="editAreaClick($event)" ng-keyup="editAreaKeyup($event)" ng-keydown="editAreaKeydown($event)"></pre>

然而并没有什么用。。。

google搜索 然后,我分别以 微信、发信息、chrome、console、javascript 为关键词进行搜索,最终发现了这篇文章–>用javascriptt脚本实现微信定时发送信息,关键词命中。遂打开,发现正是我想要的。

修改代码

// 周一----周五: 6:50 AM 提醒对方起床, 9:30 PM提醒对方回宿舍
    var appElement = document.querySelector('[ng-controller=chatSenderController]');
    var $scope = angular.element(appElement).scope();
    setInterval(function(){
        var localTime = new Date();
        if(localTime.getDay() < 6){ //非周末
            var localTimeString = localTime.toLocaleTimeString();
            if(localTimeString.indexOf('上午6:49:00') === 0){
                $scope.editAreaCtn = "6.50了,你该起床了!";
                $scope.sendTextMessage();
            }else if(localTimeString.indexOf('上午6:54:00') === 0){
                $scope.editAreaCtn = "今天又是新的一天,祝你好运!";
                $scope.sendTextMessage();
            }else if(localTimeString.indexOf('下午9:28:00') === 0){
                $scope.editAreaCtn = "时间快到9:30了,你该回去了!";
                $scope.sendTextMessage();
            }
        }
    },1000);

在这篇文章中,发送微信消息之前还要进行一波判断,但是我不需要,我只需要无脑发就行,(对了还要设置一个间歇时间,不然就成了刷屏了),最终改成这样:

var appElement = document.querySelector('[ng-controller=chatSenderController]');
var $scope = angular.element(appElement).scope();
setInterval(function(){

$scope.editAreaCtn = "消息内容";
$scope.sendTextMessage();
},1000);

然后把这一段小代码输进 console 运行了一下,哎呦,太快了。赶紧停下,发现 chrome 已经全神贯注发信息卡死了。。。无奈只好 kill 了 chrome 的进程。

sleep 的加入以及最终成果 然后想起 python 是有 sleep 这种用法的,马上搜索下,发现了一种 javascript sleep 的 土制方法( javascript 本身不支持 sleep )

最后修改了下代码,再结合 for 进行死循环,最终成果:

var appElement = document.querySelector('[ng-controller=chatSenderController]');
var $scope = angular.element(appElement).scope();
async function test() {
    $scope.editAreaCtn = "发送内容";
    $scope.sendTextMessage();
}

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms))
}
i = 0
for (; ; i++) {
    test()
    await sleep(1000000)
}

那么,只需要登录网页版微信,定位到想发信息的聊天窗口,运行即可!


在写完了上一篇文章以后,问题来了,有个人开始笑话我代码自带加密,于是,按照他的要求改了一下,顺便加上了从10~15分钟随机抽取间歇时间的功能,代码如下:

var appElement = document.querySelector('[ng-controller=chatSenderController]');
var $scope = angular.element(appElement).scope();
var n = 10;
var m = 15;

//引入sleep
function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms))
}

//发送消息
async function test() {
  $scope.editAreaCtn = "消息内容";
  $scope.sendTextMessage();
}

//产生n~m的随机数
function rd(n,m){
  var c = m-n+1;
  return Math.floor(Math.random() * c + n);
}

//死循环
while(true){
  test();
  t = rd(n,m)
  console.log(t)
  await sleep(t * 10000);
}

今日水文结束