模拟微信自动化发送(微信公众号文章自动点击)

大家好,我是烤鸭:

    分享个微信自动化发送的新方式,仅技术分享。
本来是公众号文章抓取相关的,审核一直不过,将就看吧。

需要的工具

Java(jdk1.8)

Fiddler

Python(3.8)

一些获取链接的方式

​内部链接:
https://blog.csdn.net/wnma3mz/article/details/78570580

三方API:
http://www.gsdata.cn/query/wx?q=%E5%B7%85%E5%B3%B0%E6%99%BA%E4%B8%9A

搜狗搜索:
http://weixin.sogou.com/weixin?type=1&query=%E5%A4%A7%E6%95%B0%E6%8D%AE%E6%96%87%E6%91%98&ie=utf8&sug=n&sug_type=

(会要求输入验证码)

自动化发送

修改 Fiddler,Rules—>Customize Rules, OnBeforeResponse 方法,拦截response写入

static function OnBeforeResponse(oSession: Session) {if (m_Hide304s && oSession.responseCode == 304) {oSession["ui-hide"] = "true";}//加在方法末尾if (oSession.HostnameIs("mp.weixin.qq.com") && oSession.uriContains("https://mp.weixin.qq.com/mp/getappmsgext")){var filename = "D:\\data\\wx\\fiddler-token.log";var curDate = new Date();var logContent =  "[" + curDate.toLocaleString() + "] " + oSession.GetRequestBodyAsString() + "\r\n"+oSession.GetResponseBodyAsString()+"\r\n";var sw : System.IO.StreamWriter;if (System.IO.File.Exists(filename)){sw = System.IO.File.AppendText(filename);sw.Write(logContent);}else{sw = System.IO.File.CreateText(filename);sw.Write(logContent);}sw.Close();sw.Dispose();}}

利用python微信发送,自动点击发送内容,效果如图。

在这里插入图片描述

url就是列表接口获取的,放到txt文件

import time
import tracebackimport psutil
from pywinauto.application import Application
from time import sleep
from pywinauto import mouse
from pywinauto.keyboard import send_keys
from pywinauto import keyboard# 常用方式一:连接已有微信进程(进程号在 任务管理器-详细信息 可以查看)
global gPid, gApp, win_main_Dialog, win, search, search_cords
gPid = 0
search = Nonedef GetWeChatPID(name):# 获得全部进程的ID# pids=psutil.pids()pids = psutil.process_iter()# 遍历全部进程IDfor pid in pids:if (pid.name() == name):# 输出进程IDreturn pid.pid# 没有找到则输出0return print('请打开微信')def auto_play_wechat(url):print('gPid =' + str(globals()['gPid']) + '')global gPid, gApp, win_main_Dialog, win, search, search_cordsif globals()['gPid'] == 0:gPid = GetWeChatPID('WeChat.exe')gApp = Application(backend='uia').connect(process=gPid)# 拿到微信主窗口win_main_Dialog = gApp.window(class_name='WeChatMainWndForPC')win = gApp[u'微信']win.set_focus()# 定位到信息列表,获取这个对象conunacation = win_main_Dialog.child_window(title="会话", control_type="List")# 定位到这个位置position = conunacation.rectangle()mouse.click(button='left', coords=(position.left + 100, position.top + 10))send_keys(url, pause=0.005)send_keys('{ENTER}')mes = win_main_Dialog.child_window(title=u"消息", control_type="List")mes_list = mes.items()for i, mes in enumerate(mes_list):text = url.split('mp.weixin.qq.com')[1]if text in str(mes):text_cord = mes.rectangle()mouse.click(coords=(text_cord.left + 150, text_cord.top + 50))# 最小化文件传输助手# win.maximize()sleep(2)win.close()# 鼠标复位# mouse.press(button='left',coords=(text_cord.left - 1500, text_cord.top - 20))# win_main_Dialog.minimize()def getUrlsByTxt(localUrl):with open(localUrl, "r") as f:seed = 1;for line in f.readlines():line = line.strip('\n')  # 去掉列表中每一个元素的换行符print('seed=%d,line=%s' % (seed, line))try:auto_play_wechat(line)except Exception as e:traceback.print_exc()seed += 1if __name__ == '__main__':# auto_play_wechat('http://mp.weixin.qq.com/s?__biz=MjM5NTE1OTQyMQ==&mid=2650952200&idx=1&sn=b4302c5fd6fb356c71e561c5dc8bda7f&chksm=bd0a3e1a8a7db70c010d2ebdeec37432f303ead76e2ededfd34245414dcbf90e22093a04b7cc#rd')getUrlsByTxt('D:\\data\\wx\\urls_test.txt');

fiddler 拦截之后的输出

[2022年2月17日 22:41:44] r=0.8837538029416401&__biz=MjM5NzM0MTYyMw%3D%3D&appmsg_type=9&mid=2650518168&sn=b465db5c67ec66135eb746c28478aa3c&idx=3&scene=27&title=%25E7%25BB%259D%25E7%25BE%258E%25EF%25BC%2581%25E5%258D%2583%25E4%25BD%2599%25E4%25BB%25B6%25E4%25B8%25AD%25E5%258D%258E%25E7%2591%25B0%25E5%25AE%259D%25E4%25BA%25AE%25E7%259B%25B8%25E5%259B%25BD%25E5%25AE%25B6%25E7%25BA%25A7%25E6%2596%2587%25E5%258C%2596%25E6%25AE%25BF%25E5%25A0%2582&ct=1644238894&abtest_cookie=&devicetype=Windows%2010%20x64&version=63030073&is_need_ticket=0&is_need_ad=0&comment_id=2258995482893221894&is_need_reward=0&both_ad=0&reward_uin_count=0&send_time=&msg_daily_idx=1&is_original=0&is_only_read=1&req_id=1722XL3Y7mdpMii8yfbIJSkU&pass_ticket=g%2BhXr1LC9DCyiGiZCGxTkC6pBwoMhg%2BEX2txlFKR2zFpLQTWYeO3RzUnViAEnnm5&is_temp_url=0&item_show_type=0&tmp_version=1&more_read_type=0&appmsg_like_type=2&related_video_sn=&related_video_num=5&vid=&is_pay_subscribe=0&pay_subscribe_uin_count=0&has_red_packet_cover=0&album_id=1296223588617486300&album_video_num=5&cur_album_id=undefined&is_public_related_video=NaN&encode_info_by_base64=undefined&exptype=
{"advertisement_info":[],"appmsgstat":{"show":true,"is_login":true,"liked":false,"read_num":448,"like_num":1,"ret":0,"real_read_num":0,"version":1,"prompted":0,"like_disabled":false,"style":1,"video_pv":0,"video_uv":0,"friend_like_num":0,"old_liked":false,"old_like_num":2,"show_gray":0,"old_liked_before":0,"show_like":1,"show_like_gray":0,"show_old_like":1,"show_old_like_gray":0,"show_read":1},"comment_enabled":1,"reward_head_imgs":[],"only_fans_can_comment":false,"comment_count":0,"is_fans":1,"nick_name":"ccc","logo_url":"http:\/\/mmsns.qpic.cn\/mmsns\/iaxNB5XaibCeLTYWIUGCYm7cS1kFxTx4ibUSEBZJ6VnOdXPDItJ9PaGRg\/0","friend_comment_enabled":1,"base_resp":{"wxtoken":777},"more_read_list":[],"friend_subscribe_count":0,"related_tag_article":[],"original_article_count":0,"video_share_page_tag":[],"related_tag_video":[],"only_fans_days_can_comment":false,"appmsg_album_videos":[],"test_flag":0,"video_continue_flag":1,"public_tag_info":{"tags":[]},"share_flag":{"show":1,"show_gray":0},"appmsgact":{"old_liked_before":0,"seen_before":0,"share_before":0,"favorite_before":0,"reward_before":0,"pay_before":0}}

解析文本 ReaderTxt

package com.machu.picchu.crawler.utils;import com.alibaba.fastjson.JSONObject;import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;/*** 读取Fiddler写入的内容,并将结果写入数据库* @author Administrator**/
public class ReaderTxt {
//    DBUtil dbu=new DBUtil();public static void main(String[] args){ReaderTxt rt=new ReaderTxt();ArrayList<String> list=rt.InitTxt();for(int i=0;i<list.size();i++){System.out.println("dbUtil readTxt inum="+i);///mp/getappmsgext?f=json&mock=&uin=777&key=777&pass_ticket=&wxtoken=777&devicetype=Windows10&clientversion=62060833&appmsg_token=1018_nqJWTVcEH20DIl%252Fh4-0maWDSZTGyPYXvkZxC7pYdkfUq6veSGq2rEbgTDV9pLGv0UXuxxPipiSVTela1&x5=0&f=jsonString urlmsg=list.get(i);if(!urlmsg.contains("appmsg_type")){System.out.println("dbUtil readTxt inum="+i+" ,no appmsg_type");continue;}int start=urlmsg.indexOf("&sn=")+4;urlmsg=urlmsg.substring(start);int end=urlmsg.indexOf("&");urlmsg=urlmsg.substring(0, end);String info=list.get(i+1);if(!info.contains("appmsgstat")){System.out.println("dbUtil readTxt inum="+i+" ,no appmsgstat");continue;}JSONObject json=JSONObject.parseObject(info);if(json.containsKey("appmsgstat")){JSONObject appmsgstat=json.getJSONObject("appmsgstat");int read_num=appmsgstat.getInteger("read_num");int like_num=appmsgstat.getInteger("like_num");int old_like_num=appmsgstat.getInteger("old_like_num");}}
//        rt.dbu.destroy();}public ArrayList<String> InitTxt(){ArrayList<String> list=new ArrayList<String>();try { // 防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw  /* 读入TXT文件 */  String pathname = "D:\\data\\wx\\fiddler-token.log"; // 绝对路径或相对路径都可以,这里是绝对路径,写入文件时演示相对路径File filename = new File(pathname);InputStreamReader reader = new InputStreamReader(  new FileInputStream(filename),"utf-8"); // 建立一个输入流对象reader  BufferedReader br = new BufferedReader(reader); // 建立一个对象,它把文件内容转成计算机能读懂的语言  String line = "";  while (line != null) {  line = br.readLine(); // 一次读入一行数据  if(line==null){ break;}list.add(line);}  } catch (Exception e) {  e.printStackTrace();  } return list;}
}

总结

仅限个人学习,有很多不完善的地方。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412478.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Entity FrameWork 操作使用详情

Entity FrameWork 是以ADO.net为基础发展的ORM解决方案。 一、安装Entity FrameWork框架 二、添加ADO.Net实体数据模型 三、EF插入数据 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace EFDem…

网络通信中TCP出现的黏包以及解决方法 socket 模拟黏包

粘包问题概述 1.1 描述背景 采用TCP协议进行网络数据传送的软件设计中&#xff0c;普遍存在粘包问题。这主要是由于现代操作系统的网络传输机制所产生的。我们知道&#xff0c;网络通信采用的套接字(socket)技术&#xff0c;其实现实际是由系统内核提供一片连续缓存(流缓冲)来…

windows docker redis 集群部署

大家好&#xff0c;我是烤鸭&#xff1a; 上次分享了windows docker redis&#xff0c;这么快就不够用了&#xff0c;单机的不行&#xff0c;整个集群的&#xff0c;看了网上的教程都好麻烦&#xff0c;简单点。 单机的&#xff1a;https://blog.csdn.net/Angry_Mills/article…

Codeforces Round #530 Div. 1 自闭记

A&#xff1a;显然应该让未确定的大小尽量大。不知道写了啥就wa了一发。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define ll long long #…

自研redis sdk支持自动dns切换(附源码)

大家好&#xff0c;我是烤鸭&#xff1a; 标题起的有点大了&#xff0c;说是自研&#xff0c;其实就是个封装&#xff0c;不过倒是解决了dns切换的问题&#xff08;虽然不太优雅&#xff09;。 背景 之前做活动的时候&#xff0c;用域名链接的redis&#xff0c;当时做了主备集…

使用Canal实现redis和mysql的同步

使用Canal实现redis和mysql的同步 ### canal 工作思路 Canal 会将自己伪装成 MySQL 从节点&#xff08;Slave&#xff09;&#xff0c;并从主节点&#xff08;Master&#xff09;获取 Binlog&#xff0c;解析和贮存后供下游消费端使用。Canal 包含两个组成部分&#xff1a;服务…

上线到凌晨4点半 pagehelper的bug?

大家好&#xff0c;我是烤鸭&#xff1a; 上上周末上线到凌晨4点半&#xff0c;哭了&#xff0c;没想到问题竟然如此简单。最近又懒惰了&#xff0c;写了开头就一直放着了&#xff0c;今天终于补上。 ​ 问题日志 Error querying database. Cause: com.github.pagehelper.P…

skywalking 引起 spring-cloud-gateway 的内存溢出 skywalking的bug

大家好&#xff0c;我是烤鸭&#xff1a; 又是个线上问题记录&#xff0c;这次坑惨了&#xff0c;开源软件也不是万能的&#xff0c;还是要做好压测和灰度。 问题 上游反馈大量超时&#xff0c;不止某一个服务&#xff0c;查看服务没有问题&#xff0c;猜测是网络或者环境问题…

长连接检测 监控的一点思考 java实现

大家好&#xff0c;我是烤鸭&#xff1a; 怎么监控长链接服务器的稳定&#xff0c;除了探活服务之外&#xff0c;怎么保证长链接的收发正常&#xff0c;这篇文章考虑下这个。 问题来源 运营反馈部分直播间无法收到弹幕、点赞消息&#xff0c;第一时间进行复现&#xff0c;发现…

rabbitmq 启动失败 dump日志分析

大家好&#xff0c;我是烤鸭&#xff1a; rabiitmq 突然宕机&#xff0c;并且无法启动。同事反馈测试环境 rabbitmq 有一个节点突然掉了&#xff0c;并且无法启动。 现象 集群有一个节点宕机。 去对应的机器上执行启动命令 ./rabbitmq-server -detached发现进程不在&#x…

《深入理解Java虚拟机》-读书笔记(第一、第二部分)

大家好&#xff0c;我是烤鸭&#xff1a; 《深入理解Java虚拟机》-读书笔记&#xff08;第一、第二部分&#xff09;。 第一部分&#xff1a;走进Java 第1章 走进Java 1.1 概述 摆脱了硬件平台的束缚&#xff0c;实现了“一次编写&#xff0c;到处运行”的理想&#xff1b;…

nacos 返回 403 unknown user 太他么坑了 源码解析

大家好&#xff0c;我是烤鸭&#xff1a; nacos 真的是有点意思&#xff0c;有时候哪怕某个jar包版本冲突了都可能导致莫名其妙的错误&#xff0c;源码走一波吧。 当前版本 <dependencies><dependency><groupId>org.springframework.boot</groupId>&…

研发效能提升 maven依赖扫描 版本统一 漏洞版本提醒

大家好&#xff0c;我是烤鸭&#xff1a; 整点干货&#xff0c;代码级别的版本统一&#xff0c;以及漏洞版本的扫描。 背景 两个方面吧。 项目整体的架构不统一&#xff0c;springboot/cloud 配置/注册中心也用的不统一&#xff0c;版本更是五花八门&#xff0c;怎么快速的找…

Spring boot actuator端点启用和暴露

1.启用端点 默认情况下&#xff0c;除了shutdown端点是关闭的&#xff0c;其它的都是启用的。配置一个端点的启用&#xff0c;使用management.endpoint..enabled属性&#xff0c;下面的例子是启用shutdown端点&#xff1a; management.endpoint.shutdown.enabledtrue如果你个人…