【自动化】【微信公众号】油猴 - 自动发布文章

news/2024/7/19 15:02:24 标签: js, 微信公众号, 自动化

▒ 目录 ▒

    • 🛫 导读
      • 需求
      • 开发环境
    • 1️⃣ 键盘触发
    • 2️⃣ 设置时间
    • 3️⃣ 完整代码
    • 📖 参考资料

🛫 导读

需求

公众号文章发布,需要设置定时发布、选择发布时间、点击继续等操作,时间久了,就懒了,特此做了插件,提高效率。效果图如下:
在这里插入图片描述

插件编程基础知识可参考文章《【自动化】初见 - 最强浏览器开发插件 油猴Tampermonkey https://blog.csdn.net/kinghzking/article/details/128272180》

开发环境

版本号描述
文章日期2022-12-11

1️⃣ 键盘触发

公众号可以发布今天和明天的内容,为了区分该操作,通过小键盘按键的1和2进行区分。


// day: "today" / "tomorrow"
// day: 1 / 2
function main(day) {
    // debugger;
    var timer_id = setInterval(function() {
        fabu(day, timer_id);
    }, 1234);
}
    document.body.onkeyup = function (e) {
        e = e || window.event; //标准化事件处理
        var s = e.type + " " + e.keyCode; //获取键盘事件类型和按下的值
        console.log(s, e);
        switch(e.keyCode){ // 获取当前按下键盘键的编码
            // case 0x31 : //  1
            case 0x61 : //  小键盘 1
                console.log('发布今天的')
                main(1)
                break;
            // case 0x32 : //  2
            case 0x62 : //  小键盘 2
                console.log('发布明天的')
                main(2)
                break;
        }
        return false
    }

2️⃣ 设置时间

设置时间,不能直接对元素进行赋值,这里采用了模拟点击的方式,代码如下:


function fabu_setting_qunfa(jintian_mingtian, send__timer, hour, minute) {
    // 今天明天按钮(两个元素的时候,才能继续执行)
    var dropbox_jintian_mingtian = $('.weui-desktop-form__dropdown__value');
    if (dropbox_jintian_mingtian.length < 2) {
        return false;
    }
    if (dropbox_jintian_mingtian[0].innerText != jintian_mingtian) {
        // dropbox_jintian_mingtian[0].innerText = jintian_mingtian;
        // dropbox_jintian_mingtian[0].setAttribute('title', jintian_mingtian);
       return false;
    }

    var send__timer__input =  $('div.mass-send__timer  input')
    if (send__timer__input.length < 2) {
        return false;
    }

    // 方案三:可见的元素点击
    // 显示出来时间选择框
    if($('.weui-desktop-picker__dd__time.weui-desktop-picker__dd').is(":visible") == false) {
        $('.weui-desktop-icon__time:visible').click();
        return false;
    }
    var eles_h = $('div.mass-send__timer > dl > dd > ol.weui-desktop-picker__time__panel.weui-desktop-picker__time__hour > li:nth-child(' + (hour+1) + ').weui-desktop-picker__selected:visible');
    var eles_m = $('div.mass-send__timer > dl > dd > ol.weui-desktop-picker__time__panel.weui-desktop-picker__time__minute > li:nth-child(' + (minute+1) + ').weui-desktop-picker__selected:visible');
    if (eles_h.length == 0 || eles_m.length == 0) {
        var eles_h = $('div.mass-send__timer > dl > dd > ol.weui-desktop-picker__time__panel.weui-desktop-picker__time__hour > li:nth-child(' + (hour+1) + '):visible');
        var eles_m = $('div.mass-send__timer > dl > dd > ol.weui-desktop-picker__time__panel.weui-desktop-picker__time__minute > li:nth-child(' + (minute+1) + '):visible');
        eles_h[0].click();
        eles_m[0].click();
        return false;
    }

    return true;
}

fabu_setting_qunfa('今天', '11:55', 11, 55);

3️⃣ 完整代码

其他逻辑都比较简单,通过定时器,不断检测当前状态,然后进行模拟点击完成相关操作。

// ==UserScript==
// @name         MpAutoPublish
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  微信公众号自动发布插件
// @author       yeahMao
// @match        http://mp.weixin.qq.com/*
// @match        https://mp.weixin.qq.com/*
// @icon         https://www.google.com/s2/favicons?domain=tampermonkey.net
// @require      https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.js
// @require      http://code.jquery.com/jquery-1.11.0.min.js
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_listValues
// @grant        GM_deleteValue
// 红色油猴才有的权限 @grant        GM_cookie
// 红色油猴才有的权限 @grant        unsafeWindow
// 红色油猴才有的权限 @grant        window
// @copyright 2021, yeahmiao (https://openuserjs.org/users/yeahmiao)
// @license MIT
// ==/UserScript==


(function() {
    'use strict';


// 获取群发ticket
function getticket() {
    Log.info('获取群发ticket');
    return WechatRequest({
        url: `${Config.api.safeassistant}?1=1&token=${getUrlParam('token')}`,
        form: {
            token: getUrlParam('token'),
            f: 'json',
            ajax: 1,
            random: Math.random(),
            action: 'get_ticket',
        },
    }).then((body) => {
        console.log(body)
        if (body.base_resp.ret === 0) {
            Log.info('群发ticket获取成功');
            return {
                ticket: body.ticket,
                operation_seq: body.operation_seq,
            };
        } else {
            Log.info('群发ticket获取失败');
            throw body;
        }
    });
}

// var ticket = getticket();
// console.log(ticket)

function fabu_setting_set_mingtian() {
    var _dropbox_jintian_mingtian = $('div.mass-send__timer > div > dl > div:nth-child(2) > ul > li.weui-desktop-dropdown__list-ele');
    if (_dropbox_jintian_mingtian.length >= 2) {
        _dropbox_jintian_mingtian[1].click()
    }
}

function fabu_setting_qunfa(jintian_mingtian, send__timer, hour, minute) {
    // 今天明天按钮(两个元素的时候,才能继续执行)
    var dropbox_jintian_mingtian = $('.weui-desktop-form__dropdown__value');
    if (dropbox_jintian_mingtian.length < 2) {
        return false;
    }
    if (dropbox_jintian_mingtian[0].innerText != jintian_mingtian) {
        // dropbox_jintian_mingtian[0].innerText = jintian_mingtian;
        // dropbox_jintian_mingtian[0].setAttribute('title', jintian_mingtian);
       return false;
    }

    var send__timer__input =  $('div.mass-send__timer  input')
    if (send__timer__input.length < 2) {
        return false;
    }

    // 方案三:可见的元素点击
    // 显示出来时间选择框
    if($('.weui-desktop-picker__dd__time.weui-desktop-picker__dd').is(":visible") == false) {
        $('.weui-desktop-icon__time:visible').click();
        return false;
    }
    var eles_h = $('div.mass-send__timer > dl > dd > ol.weui-desktop-picker__time__panel.weui-desktop-picker__time__hour > li:nth-child(' + (hour+1) + ').weui-desktop-picker__selected:visible');
    var eles_m = $('div.mass-send__timer > dl > dd > ol.weui-desktop-picker__time__panel.weui-desktop-picker__time__minute > li:nth-child(' + (minute+1) + ').weui-desktop-picker__selected:visible');
    if (eles_h.length == 0 || eles_m.length == 0) {
        var eles_h = $('div.mass-send__timer > dl > dd > ol.weui-desktop-picker__time__panel.weui-desktop-picker__time__hour > li:nth-child(' + (hour+1) + '):visible');
        var eles_m = $('div.mass-send__timer > dl > dd > ol.weui-desktop-picker__time__panel.weui-desktop-picker__time__minute > li:nth-child(' + (minute+1) + '):visible');
        eles_h[0].click();
        eles_m[0].click();
        return false;
    }

    return true;
}

// 0. 打开定时群发
// 1. 今天还可以群发1次
//      设置时间为12:12
// 2. 今天还可以群发0次
//      设置时间为12:00
function fabu_setting(day) {
    // 0. 打开定时群发
    {
        var eles = $('.mass-send__form input.weui-desktop-switch__input');
        if (eles.length) {
            if (eles[0].checked == false) {
                eles[0].click()
                return
            }
        }
    }
    var dingshi_qunfa = $('.weui-desktop-form__control-group .weui-desktop-switch__box');
    if (dingshi_qunfa.length) {
        var dropbox_jintian_mingtian = $('.weui-desktop-form__dropdown__value');
        if (dropbox_jintian_mingtian.length < 2) {
            dingshi_qunfa[0].click();
            return false;
        }
    }

    // 元素不存在(未加载),直接返回
    var mass_send__footer = $('.mass-send__footer');
    if (mass_send__footer.length == 0) {
        return
    }

    var mass_send__footer_txt = mass_send__footer[0].innerText;
    console.log(">>>        mass_send__footer_txt = ", mass_send__footer_txt);

    // 发布今天的
    if (day == 1) {
        if (mass_send__footer_txt.search('今天还可以群发1次') == -1) {
            alert('今天还可以群发0次!!!   ' + mass_send__footer_txt)
            return false;
        }

        let d = new Date();
        if (d.getHours() < 11) {
            return fabu_setting_qunfa('今天', '11:55', 11, 55);
        } else if (d.getHours() < 18) {
            return fabu_setting_qunfa('今天', '18:18', 18, 18);
        } else {
            return true;
        }
    }
    // 发布明天的
    else if (day == 2) {
        if (mass_send__footer_txt.search('今天还可以群发') != -1) {
            fabu_setting_set_mingtian();
            return false;
        } else if (mass_send__footer_txt.search('明天还可以群发0次') != -1) {
            alert('明天还可以群发0次!!!    ' + mass_send__footer_txt)
        } else if (mass_send__footer_txt.search('明天还可以群发1次') != -1) {
            console.log(">>>        明天还可以群发1次");
            return fabu_setting_qunfa('明天', '11:58', 11, 58);
        } else {
            alert('未知内容:' + mass_send__footer_txt)
        }
    }

    return false;
}

function getContinueSend() {
  var ret = null;
  var btns = $('.weui-desktop-dialog__ft button');
  for (var i = 0;  i < btns.length; ++i) {
    var btn = btns[i];
    console.log(btn)
  }
}
// getContinueSend()

function fabu(day, timer_id) {

    // 取消选中《文中广告智能插入》
    var js_auto_insert_ad = $('.js_auto_insert_ad')
    if (js_auto_insert_ad.length == 0) {
        alert('【失败】 取消选中《文中广告智能插入》');
        clearInterval(timer_id);
        return;
    } else {
        if (js_auto_insert_ad[0].checked) {
            js_auto_insert_ad[0].click();
        }
    }

    var mass_send__footer = $('.mass-send__footer');
    var jixu_qunfa = $('div > div:nth-child(2) > div.weui-desktop-dialog__wrp > div > div.weui-desktop-dialog__ft > div > div:nth-child(1) > button');
    var wechat_yanzheng = $('body > div.dialog_wrp.ui-draggable > div > div.dialog_hd > h3');
    if (wechat_yanzheng.length && $(wechat_yanzheng[0]).is(":visible")) {
        console.log(">>> 微信验证");
        // 微信验证:清理定时器
        clearInterval(timer_id);
        throw(-1);
    }
    else if (jixu_qunfa.length && $(jixu_qunfa[0]).is(":visible")) {
        console.log(">>> 继续群发");
        jixu_qunfa.click()
        clearInterval(timer_id);
    }
    else if (mass_send__footer.length && $(mass_send__footer).is(":visible")) {
        console.log(">>> 设置页面");
        // 如果设置完成了,执行点击《群发》按钮
        if (fabu_setting(day)) {
            // 立即发送
            var btn_qunfa = $('div.weui-desktop-dialog__ft > div > div.weui-desktop-popover__wrp > div > button');
            btn_qunfa.click();
        }
    }
    else {
        console.log(">>> 保存并群发");
        $('#js_send').click()
    }
}

// day: "today" / "tomorrow"
// day: 1 / 2
function main(day) {
    // debugger;
    var timer_id = setInterval(function() {
        fabu(day, timer_id);
    }, 1234);
}

    document.body.onkeyup = function (e) {
        e = e || window.event; //标准化事件处理
        var s = e.type + " " + e.keyCode; //获取键盘事件类型和按下的值
        console.log(s, e);
        switch(e.keyCode){ // 获取当前按下键盘键的编码
            // case 0x31 : //  1
            case 0x61 : //  小键盘 1
                console.log('发布今天的')
                main(1)
                break;
            // case 0x32 : //  2
            case 0x62 : //  小键盘 2
                console.log('发布明天的')
                main(2)
                break;
        }
        return false
    }
})();

📖 参考资料

  • 自动化】初见 - 最强浏览器开发插件 油猴Tampermonkey https://blog.csdn.net/kinghzking/article/details/128272180

**ps:**文章中内容仅用于技术交流,请勿用于违规违法行为。


http://www.niftyadmin.cn/n/1710548.html

相关文章

mysql存储树形结构的数据文件目录_【MySQL疑难杂症】如何将树形结构存储在数据库中(方案二 Path Enumeration)...

今天来介绍把树形结构存入数据库的第二种方法——路径枚举法。还是借用上一篇的栗子&#xff0c;为了方便大家查阅&#xff0c;我把图又原样搬过来了。需要回答的问题依旧是这样几个&#xff1a;1.查询小天的直接上司。2.查询老宋管理下的直属员工。3.查询小天的所有上司。4.查…

mysql增量备份工具_利用 xtrabackup 工具实现增量备份 mysql(附脚本)

文章目录[隐藏]1、安装 percona 源2、安装 xtrabackup3、创建备份文件夹4、编写备份脚本5、执行第一次全量备份6、创建计划任务&#xff0c;进行日常增量备份7、制作还原脚本1、安装 percona 源yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/per…

debian 换源_[桌面Linux应用系列] 2. 换源、deb、ppa、dpkg、snap

换源上次我们聊了ubuntu的包管理器apt和apt的GUI封装。今天我们说说如何比较愉快的玩耍apt。ubuntu千好万好&#xff0c;有一点不好——是洋鬼子出的&#xff0c;它的官方软件源自然也就不在中国。我国的网络环境大家都明白&#xff0c;这就造成直接使用ubuntu的官方源会速度死…

安卓java文件中 使用xml图片文件_Java小知识:使用Stax解析xml文件

问题&#xff1a;通过使用Stax解析xml文件时&#xff0c;出现以下错误消息&#xff1a;线程“主”中的异常javax.xml.stream.XMLStreamException&#xff1a;[row&#xff0c;col]&#xff1a;[86,11]处的ParseError消息&#xff1a;与元素类型“ type_id”相关联的属性“ {1}”…

Java如何清除日期_java日期时间处理

一.简介1.java中常用的日期有三种(精确到毫秒):A.long--毫秒数B.Date--日期C.Calendar--日历、抽象类2.Java中日期经常使用以下五个方面&#xff1a;A.创建日期B.日期格式化显示C.日期的转换(主要是和字符串之间的相互转换)D.日期中年.月.日.时.分.秒.星期.月份等获取。E.日期的…

删除mysql的定时器_Mysql定时器定时删除表数据

由于测试环境有张日志表没定时2分钟程序就狂插数据&#xff0c;导致不到1一个月时间&#xff0c;这张日志表就占用了6.7G的空间&#xff0c;但是日志刷新较快&#xff0c;有些日志就没什么作用&#xff0c;就写了个定时器&#xff0c;定期删除这张表的数据首先先查看mysql是否开…

php打印出来多行mysql_通过php数组将多行插入MySQL

呼如林代码点火器现在支持多个插入/批处理插入。我也有同样的问题。虽然回答问题已经很晚了&#xff0c;但它会对某人有所帮助。所以才回答这个问题。$data array(array(title > My title ,name > My Name ,date > My date),array(title > Another title ,name &g…

python 从外部传入字典_Python基础 | 0xe 函数(上)

函数定义我们可以将一些实现特定功能&#xff0c;重复用到的代码片段抽取出来&#xff0c;封装成一个函数&#xff0c;比如求两个数之和的函数&#xff1a;def plus(a, b):""" 计算两个数的和 :param a: 第一个参数 :param b: 第二个参数 :return: …