开发者

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

目录
  • 微信指数爬取 
    • 1.MAC系统Appium的环境搭建
      • 1. homebrew的安装
      • 2. 通过brew安装node
      • 3. 安装npm
      • 4. 安装android-sdk-macosx
      • 5. 安装jdk
      • 6. 环境变量配置
      • 7. 安装appium-doctor
      • 8. 安装appium命令行版
      • 9. 安装mitmproxy
      • 10.安装网易mumu安卓模拟器
    • 2.微信指数小程序爬取
      • 1.启动appium 在终端输入
      • 2.启动网易mumu安卓模拟器并安装微信
      • 3. 查看adb连接的设备
      • 4. 模拟器安装mitmproxy证书
      • 5.通过抓包发现微信指数小程序生成search_key的接口
      • 6.编写appium模拟点击微信进入微信指数小程序触发search_key指令代码
  • 总结:

    微信指数爬取 

    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 PAT编程客栈H=$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_ca编程客栈ps={
            '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')))
            yunx编程客栈u1.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)
         www.cppcns.com   # 登陆
            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逆向微信指数爬取的资料请关注我们其它相关文章!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜