johnpoint

johnpoint

(。・∀・)ノ゙嗨
github

設定微信自動發送訊息

首先先說一說吐槽一下微信封閉的生態圈,除了開放給搜狗這個搜索引擎可以搜索微信公眾號的 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);
}

今日水文結束

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。