本文章仅供学习和参考
因为wx的cookies和app_msg会过期
这篇文章主要是提供自动获取cookies和app_msg的过程
实现了cookies和app_msg的获取很容易就实现公众号的自动采集
只需要先登录微信pc端就可以
一.目前的流程
1.使用wx公众平台,进行扫码登录,获取公众号历史文章链接
2.开启mitmproxy代理
3.使用pywinauto模块实现微信pc端自动对文件传输助手发送公众号文章url并点击,从而实现获取微信pc端cookies和appmsg_token
二.实现
第一步网上有许多教程,在这里就不说了
主要是需要实现mitmproxy自动抓包和微信pc端自动点击
mitmproxy自动抓包:
创建write_cookies.py
import urllib
import sys
from mitmproxy import ctx
from mitmproxy import io, http
# command: mitmdump -s write_cookies.py -w dat mp.weixin.qq.com/mp/getappmsgext
class WriterCookie:
"""
mitmproxy的监听脚本,写入cookie和url到文件
"""
def __init__(self,outfile: str) -> None:
self.f = open(outfile, "w")
def response(self, flow: http.HTTPFlow) -> None:
"""
完整的response响应
:param flow: flow实例,
"""
# 获取url
url = urllib.parse.unquote(flow.request.url)
# 将url和cookie写入文件
if "mp.weixin.qq.com/mp/getappmsgext" in url:
self.f.write(url + '\n')
self.f.write(str(flow.request.cookies))
self.f.close()
# 退出
exit()
# 第四个命令中的参数
addons = [WriterCookie(sys.argv[4])]
``
再创建get_wechat_cookies.py文件
open.bat文件
@echo off
echo 开始设置IE代理上网
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /d "127.0.0.1:8080" /f
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyOverride /t REG_SZ /d "<-loopback>" /f
echo 代理设置完成按任意键关闭
close.bat
@echo off
echo 开始清除IE代理设置
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /d "" /f
reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyOverride /f
echo IE代理清楚完成按任意键关闭
import re
import os
from wechat_auto import auto_play_wechat
import threading
import time
class ReadCookie(object):
"""
启动write_cookie.py 和 解析cookie文件,
"""
def __init__(self,outfile):
self.outfile = outfile
print(self.outfile)
def parse_cookie(self):
"""
解析cookie
:return: appmsg_token, biz, cookie_str·
"""
with open(self.outfile) as f:
data = f.read()
appmsg_token_string = re.findall("appmsg_token.+?&", data)[0].split('=')[1]
cookies = re.findall(r"\['(.*?)'\]", data)
Wechat_cookies = {}
for cookie in cookies:
cookie = cookie.split("', '")
Wechat_cookies[cookie[0]] = cookie[1]
return appmsg_token_string,Wechat_cookies
def write_cookie(self):
"""
启动 write_cookies。py
:return:
"""
#当前文件路径
path = os.path.split(os.path.realpath(__file__))[0]
#path = os.getcwd()
print(path)
# mitmdump -s 执行脚本 -w 保存到文件 本命令
command = "mitmdump -s {}/write_cookies.py -w {} mp.weixin.qq.com/mp/getappmsgext".format(
path,self.outfile)
os.system(command)
class MyThread(threading.Thread):
def __init__(self, func, args=()):
super(MyThread, self).__init__()
self.func = func
self.args = args
def run(self):
time.sleep(2)
self.result = self.func(*self.args)
def get_result(self):
threading.Thread.join(self) # 等待线程执行完毕
try:
return self.result
except Exception:
return None
def get_cookie():
os.system('open.bat')
rc = ReadCookie('cookie.txt')
rc.write_cookie()
os.system('close.bat')
appmsg_token_string, cookies = rc.parse_cookie()
return appmsg_token_string, cookies
url='https://mp.weixin.qq.com/s?__biz=MjM5MjAxNDM4MA==&mid=2666430514&idx=2&sn=effd2a2e000791d6ac52451dc81223d9&chksm=bdb6e9718ac1606710570156d51879e0b2dcf1351bf9a0eea8002b59f74808ff218e17eae6de#rd'
def get_result(url):
more_th1 = MyThread(get_cookie)
more_th2 = MyThread(auto_play_wechat, args=(url,))
more_th1.start()
more_th2.start()
more_th1.join()
more_th2.join()
appmsg_token_string = more_th1.get_result()[0]
cookies = more_th1.get_result()[1]
return appmsg_token_string,cookies
get_result(url)
微信自动在文件传输助手发送url
wechat_auto.py这个文件可以实现自动发送url,并点击
import time
import psutil
from pywinauto.application import Application
from time import sleep
from pywinauto import mouse
from pywinauto.keyboard import send_keys
from pywinauto import keyboard
# 常用方式一:连接已有微信进程(进程号在 任务管理器-详细信息 可以查看)
def GetWeChatPID(name):
# 获得全部进程的ID
# pids=psutil.pids()
pids = psutil.process_iter()
# 遍历全部进程ID
for pid in pids:
if(pid.name()==name):
# 输出进程ID
return pid.pid
# 没有找到则输出0
return print('请打开微信')
def auto_play_wechat(url):
pid = GetWeChatPID('WeChat.exe')
app = Application(backend='uia').connect(process=pid)
# 拿到微信主窗口
win_main_Dialog = app.window(class_name='WeChatMainWndForPC')
win = app[u'微信']
# 将窗口最大化
win.maximize()
search = win_main_Dialog.child_window(title=u"搜索", control_type="Edit")
# 获得搜索框的位置信息
search_cords = search.rectangle()
mouse.click(button='left', coords=(search_cords.left + 100, search_cords.top + 10))
mouse.click(button='left', coords=(search_cords.left + 100, search_cords.top + 10))
mouse.click(button='left', coords=(search_cords.left + 100, search_cords.top + 10))
# 输入名称文件传输助手
send_keys('文件传输助手')
time.sleep(2)
# 按Enter键,进入聊天界面
send_keys('{ENTER}')
send_keys(url)
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+ 1500, text_cord.top + 20))
#最小化
win.minimize()
sleep(2)
win_main_Dialog.minimize()
#auto_play_wechat('http://mp.weixin.qq.com/s?__biz=MjM5NTE1OTQyMQ==&mid=2650952200&idx=1&sn=b4302c5fd6fb356c71e561c5dc8bda7f&chksm=bd0a3e1a8a7db70c010d2ebdeec37432f303ead76e2ededfd34245414dcbf90e22093a04b7cc#rd')
当上面3个文件都创建好了之后,运行get_wechat_cookies.py
就可以得到传入公众号文章的app_msg和cookies
当app_msg和cookies过期时在自动获取就好了,这样就可以实现全自动采集公众号文章的点赞和评论了
全部的代码就不放了,这里已经把自动获取app_msg和cookies的代码给出了,后面的很简单就可以实现了