相关文章推荐
任性的筷子  ·  Java中List ...·  2 年前    · 
暴躁的蜡烛  ·  snmp出現Timeout: No ...·  2 年前    · 
憨厚的课本  ·  div添加display: ...·  2 年前    · 

插件编程基础知识可参考文章《【自动化】初见 - 最强浏览器开发插件 油猴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
})();

📖 参考资料

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

AppiumWeChatAuto 1、如果要实现微信公众号文章自动采集就必须实现微信公众号文章自动浏览操作; 2、此工程是基于Appium和Java来实现的Android微信客户端自动化浏览的操作,基于微信6.6.7版本,版本的历史文章列表页面入口都是一致的,历史文章列表只有一种显示形式,比较容易做自动化浏览操作处理。 3、使用AndroidStudio创建项目主要是为了可以直接运行APK到设备或虚拟机上查看所需的设备信息,运行Android工程查看设备信息的时候Edit Configurations切换到app,运行自动化脚本的时候切换到AppiumAutoScan。支持按最近一周,一个月,一年或爬取所有历史文章,checkTimeLimit()传入不同限制时间类型的参数即可。 4、不做Android开发的可以下载Eclipse IDE,在Eclipse下运行Java程序还比较方便,拷贝以下工程源码中的三份文件即可。 java-client-3.1.0.jar selenium-server-standalone-2.44.0.jar AppiumWe 开源代码仅限技术分享交流,请充分尊重公众号作者的知识产权以及劳动成果,同时作为有素质的爬虫开发人员请控制好抓取的频率,本人概不承担任何基于本代码实现的工程引起的责任或纠纷. 此项目是微信公众号批量自动化爬虫的核心实现, 面向开发者开源, 可以当做go语言包引入到自己项目中, 完整产品必须二次开发实现,QQ交流群: 563954381 微信的防作弊一直在不断更新完善,过于频繁的抓取可能导致微信账号被封禁,在需要大量抓取的任务请使用小号或者测试号进行 里面就有一篇记录自动发布微信公众号文章的介绍。 自动发布微信公众号,是程序可通过采集或者同步数据等多种方式,然后获取到标题和内容,然后经过爬虫,进行数据处理,包括微信公众号文章发布所需的封面截图等一系列操作,可大大的提高每天编写的繁琐。 该项技术采用了多种语言进行处理,可全方面实现发布自动,如发布过程遇到问题,也会及时通知。 同时该项技术也为订阅号提供. 1.注册链接 https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/indexhttps://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index 到达这个界面微信扫码登录即可(若出现登录失败问题则建议换一个更好的网络环境再尝试或者尝试刷新网
可以使用Python开发微信公众号,常用的Python库包括itchat、wechatpy、wxpy等。这些库可以帮助开发者实现微信公众号的功能,例如自动回复、消息推送、菜单设置等。 其中,itchat是一个非常流行的Python库,提供了微信个人号和公众号的API,可以通过Python代码来实现微信的自动化操作。而wechatpy则是一个专门针对微信公众号的Python库,支持高级接口和企业微信接口,可以方便地进行公众号开发。 wxpy则是一个基于itchat的Python库,可以快速地实现微信机器人的开发,具有良好的扩展性和定制性。通过wxpy,开发者可以轻松地实现微信自动回复、消息推送和群聊机器人等功能。 总之,使用Python开发微信公众号可以大大提高开发效率,使得开发者可以更加专注于业务逻辑的实现。