公众号文章全自动采集(使用mitmproxy抓包,然后用pywinauto实现自动点击)app_msg动态获取

本文章仅供学习和参考

因为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的代码给出了,后面的很简单就可以实现了

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值