脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - python逆向微信指数爬取实现步骤

python逆向微信指数爬取实现步骤

2022-09-20 12:30别None了 Python

这篇文章主要为大家介绍了python逆向微信指数爬取的实现步骤,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪

微信指数爬取 

Appium + mitmproxy + 网易mumu安卓模拟器实现微信指数小程序爬取

通过appium实现将指令传输给手机进行相关的操作,mitmproxy运行Python脚本过滤出相关的请求,安卓模拟器取代真机使项目可以更好的落地。

 

1.MAC系统Appium的环境搭建

 

1. homebrew的安装

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

 

2. 通过brew安装node

brew install node

检查node是否安装成功

node -v

 

3. 安装npm

sudo bash
sudo curl -L https://npmjs.org/install.sh | sh

检查npm是否安装完成

npm -v

 

4. 安装android-sdk-macosx

链接: android-sdk-macosx.
下载完成因sdk缺少对应的platform-tools和build-tools 执行命令在弹出窗口进行勾选下载platform-tools和build-tools

python逆向微信指数爬取实现步骤

 

5. 安装jdk

去官网下载:下载地址为直接下载dmg去安装

链接:JDK

 

6. 环境变量配置

可参考以下配置

cd ~
vi .bash_profile

JAVA_HOME=/Library/java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home
CLASSPAHT=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:$PATH:
export JAVA_HOME
export CLASSPATH
export PATH
export ANDROID_HOME=/Users/admin/Desktop/android-sdk-macosx
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/platform-tools

source .bash_profile

 

7. 安装appium-doctor

检查已有的环境是否都已成功

npm install -g appium-doctor

安装完成appium-doctor 在终端输入appium-doctor命令自动检查appium所依赖的包是否有缺失

python逆向微信指数爬取实现步骤

 

8. 安装appium命令行版

npm install -g appium

appium -v 查看版本号

 

9. 安装mitmproxy

(抓包,中间人代理工具、支持SSL)

brew install mitmproxy

具体用法自行研究 本文只是简单的使用

 

10.安装网易mumu安卓模拟器

官网直接下载 有Mac版的

 

2.微信指数小程序爬取

 

1.启动appium 在终端输入

appium

 

2.启动网易mumu安卓模拟器并安装微信

python逆向微信指数爬取实现步骤

 

3. 查看adb连接的设备

adb devices

首次需要先连接到模拟器 网易mumu端口号为7555 终端输入

adb connect 127.0.0.1:7555

python逆向微信指数爬取实现步骤

 

4. 模拟器安装mitmproxy证书

python逆向微信指数爬取实现步骤

python逆向微信指数爬取实现步骤

将该证书打开在钥匙串中找到修改全部信任
然后在模拟器中安装 打开模拟器的设置—安全—从SD卡安装

python逆向微信指数爬取实现步骤

打开内部存储空间—MuMu共享文件夹—将信任的证书拖进去即可

python逆向微信指数爬取实现步骤

 

5.通过抓包发现微信指数小程序生成search_key的接口

python逆向微信指数爬取实现步骤

python逆向微信指数爬取实现步骤

编写Python脚本过滤出该请求并将该请求的响应内容(search_key)写入Mongo库

import json
import time
import sys
from pymongo import MongoClient
def response(flow):
    client = MongoClient("xx.xx.xx.xx",27017)
    db = client["Spider"]
    url = "https://search.weixin.qq.com/cgi-bin/searchweb/weapplogin"
    if flow.request.url.startswith(url):
        text = flow.response.text
        data = json.loads(text)
        search_key = data.get("data").get("search_key")
        with open("./search_key.txt","w+") as f:
            f.write(search_key)
        """
        search_key 博主是入库然后scrapy爬虫从库中读search_key进行请求 具体怎么用自己按情况即可
        """

使用mitmdump -s xxx.py 执行Python脚本

mitmdump -s test.py

先手动点击进入微信指数小程序触发生成search_key的接口 此时mitmproxy运行python程序按照代码对该请求进行过滤并将响应中的search_key取出写入到本地文件

python逆向微信指数爬取实现步骤


到了这一步大家应该已经知道微信指数小程序的爬取方式了 在这里说下生成search_key接口的触发规则:首次进入微信指数小程序 2.三十分钟search_key失效

 

6.编写appium模拟点击微信进入微信指数小程序触发search_key指令代码

import time
from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from pymongo import MongoClient
PLATFORM="Android"
deviceName="emulator-5554"
# app_package和app_activity可以通过adb shell进行获取
app_package="com.tencent.mm"
app_activity=".ui.LauncherUI"
driver_server="http://127.0.0.1:4723/wd/hub"
class Moments():
    def __init__(self):
        self.desired_caps={
        "platformName":PLATFORM,
        "deviceName":deviceName,
        "appPackage":app_package,
        "appActivity":app_activity,
        "noReset": "True",
        }
        self.driver=webdriver.Remote(driver_server,self.desired_caps)
        self.wait=WebDriverWait(self.driver,300)
    def login(self):
        # 允许获取xx
        yunxu1 = self.wait.until(EC.presence_of_element_located((By.ID,"com.android.packageinstaller:id/permission_allow_button")))
        yunxu1.click()
        time.sleep(5)
        # 允许获取xxx
        yunxu2 = self.wait.until(EC.presence_of_element_located((By.ID,"com.android.packageinstaller:id/permission_allow_button")))
        yunxu2.click()
        time.sleep(5)
        # 登陆按钮
        login = self.wait.until(EC.presence_of_element_located((By.ID,"com.tencent.mm:id/d75")))
        login.click()
        time.sleep(3)
        # 手机号
        phone = self.wait.until(EC.presence_of_element_located((By.ID,"com.tencent.mm:id/hz")))
        phone.send_keys("xxxxxx")
        time.sleep(3)
        # 下一步
        nextButton = self.wait.until(EC.presence_of_element_located((By.ID,"com.tencent.mm:id/alr")))
        nextButton.click()
        time.sleep(2)
        # 密码
        passButton = self.wait.until(EC.presence_of_element_located((By.ID,"com.tencent.mm:id/hz")))
        passButton.send_keys("xxxxx")
        time.sleep(2)
        # 登陆
        login2 = self.wait.until(EC.presence_of_element_located((By.ID,"com.tencent.mm:id/alr")))
        login2.click()
        time.sleep(6)
        # 不允许获取通讯录
        notButton = self.wait.until(EC.presence_of_element_located((By.ID,"com.tencent.mm:id/an2")))
        notButton.click()
        time.sleep(5)
    def test(self):
    """
    登陆之后 依次点击发现 小程序 微信指数 触发接口
    """
        time.sleep(10)
        self.driver.tap([(428,1214),(471,1251)],100)
        time.sleep(5)
        # 发现页小程序的坐标
        self.driver.tap([(85,787),(148,816)],100)
        time.sleep(5)
        self.driver.tap([(114,237),(206,269)],100)
        time.sleep(20)
        self.driver.tap([(644,42),(708,85)],100)
    def main(self):
        # 首次登陆
        self.login()
        self.test()
M=Moments()
M.main()

郑重声明:首次登陆以后的每次操作只需要执行test方法点击到发现—小程序—微信指数即可,可以通过noReset:True设置每次不重新安装app,所以不必每次都登陆账号导致增加不必要的操作
通过uiautomatorviewer获取appium页面元素进行定位

python逆向微信指数爬取实现步骤

python逆向微信指数爬取实现步骤

 

总结:

通过appium将模拟点击的指令操控模拟器进行点击进入微信指数的小程序触发search_key接口的生成,然后通过mitmdump -s xx.py程序进行过滤出相应请求将响应中的search_key进行持久化 爬取数据的时候还是使用scrapy (直接使用模拟器爬取不是好的方法)。方案可能不是最好的但是比直接破解微信登录接口、js_code(生成search_key的必要参数) 要好很多了

以上就是python逆向微信指数爬取实现步骤的详细内容,更多关于python逆向微信指数爬取的资料请关注服务器之家其它相关文章!

原文链接:https://coderl.blog.csdn.net/article/details/87944020

延伸 · 阅读

精彩推荐
  • PythonPython爬虫,获取,解析,存储详解

    Python爬虫,获取,解析,存储详解

    这篇文章主要介绍了Python爬虫获取、解析,获数据操作,其中代码描述非常详细,需要的朋友可以参考下,希望能够给你带来帮助...

    万能守恒定律4192022-01-19
  • Pythonpython进阶之多线程对同一个全局变量的处理方法

    python进阶之多线程对同一个全局变量的处理方法

    今天小编就为大家分享一篇python进阶之多线程对同一个全局变量的处理方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    Jonny03185972021-04-17
  • PythonPython 实现自动获取种子磁力链接方式

    Python 实现自动获取种子磁力链接方式

    今天小编就为大家分享一篇Python 实现自动获取种子磁力链接方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    锦城花开8612020-04-19
  • PythonPython+Selenium实现一键摸鱼&采集数据

    Python+Selenium实现一键摸鱼&采集数据

    将Selenium程序编写为 .bat 可执行文件,从此一键启动封装好的Selenium程序,省时省力还可以复用,岂不美哉。所以本文将利用Selenium实现一键摸鱼&一键采集数...

    是小菜欸5802022-08-31
  • Pythonpython中ASCII码和字符的转换方法

    python中ASCII码和字符的转换方法

    今天小编就为大家分享一篇python中ASCII码和字符的转换方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    是世博呀12542021-03-15
  • Python详解C++编程中一元运算符的重载

    详解C++编程中一元运算符的重载

    这篇文章主要介绍了C++编程中一元运算符的重载,特别对递增和递减运算符重载作了着重讲解,需要的朋友可以参考下 ...

    脚本之家3492020-08-06
  • Python详解Python if-elif-else知识点

    详解Python if-elif-else知识点

    本篇文章给大家总结了Python中if-elif-else的相关知识点以及语法相关内容,有兴趣的朋友参考学习下。...

    Python教程网11272021-03-03
  • Python利用Python实现最小二乘法与梯度下降算法

    利用Python实现最小二乘法与梯度下降算法

    这篇文章主要介绍了利用Python实现最小二乘法与梯度下降算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    nbody19968072021-09-07