admin 管理员组

文章数量: 887019

微信公众号抓取所需环境(基于windows 系统 和 安卓手机)

  1. 手机 2.Java 环境 3,安卓环境 4.appium 5.anyprxy 6.python环境7.nodejs
    PC环境搭建:
  2. Java 环境
  3. 安卓环境:电脑中安装对应手机的安卓环境(安卓环境是基于 java 环境)
  4. Nodejs: https://nodejs/en/
  5. Appium: http://appium.io/
  6. Anyproxy 基于nodejs 安装完成nodejs后,在命令窗口直接执行 npm install anyproxy -g 指令即可安装anyproxy
    安装完成 anyproxy 后 在命令窗口直接执行 anyproxy -i即可启动
    手机准备:
    1. 解除 root 和系统刷机(使用开发版)
    2. 微信 app安装
    3. 打开开发者选项
    4. 打开手机 usb调试和usb安装选项

其他准备:
1. 微信号
2. 需要抓取的微信公众号,( 对应biz)

详细描述:

java 环境搭建

  1. 首先我们需要下载java开发工具包JDK,下载地址:http://www.oracle/technetwork/java/javase/downloads/index.html

  2. 安装JDK,安装过程中可以自定义安装目录等信息,例如我们选择安装目录为

  3. 配置java 环境变量

    •	变量名:JAVA_HOME
    •	变量值:C:\Program Files (x86)\Java\jdk1.8.0_91        // 要根据自己的实际路径配置
    •	变量名:CLASSPATH
    •	变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;         //记得前面有个"."
    •	变量名:Path
    •	变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
    
  4. 在 指令窗口 运行 java -version,出现安装对应 的版本信息才算安装成功,否则需重新安装对应的java 环境,

  5. 安卓环境搭建

    1. 可下载 Android Studio ,地址:https://developer.android.google/studio?hl=zh-cn 下载安装完成后,在设置中可以直接下载对应的安卓手机环境

  1. 安卓环境变量配置
    例如Android sdk的路径为 E:\Sdk
    则,环境变量中新建,
    变量名为: ANDROID_HOME
    变量值为: E:\Sdk
    同样的编辑Path环境变量,在末尾添上
    %ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools
    注意 “;” 的使用
    ps:对于win10系统,path环境变量是一条一条的,所以添加在path上的需要分割成两条。
    pps:
    %ANDROID_HOME%\platform-tools
    %ANDROID_HOME%\tools
    同样在终端验证,输入adb,看是否有正常输出

  2. NodeJS

    https://nodejs/en/
    目前最新的版本为14.12.可自行选择需要的版本
    下载完成后进行默认安装即可,安装完成在命令窗口执行
    node -v 和 npm -v 两个指令,输出版本号及整明 node 和 npm 安装完成

  3. Appium
    https://github/appium/appium-desktop/releases/tag/v1.18.0-2(当前最新版本)
    安装完成后打开

1.点击 start 进入下一级页面(默认设置即可,如有需要进入高级设置选项自行选择)

2.级页面点击如图所示,进入下级菜单
3. 设置对应参数启动会话(启动会话前提,用数据线链接手机,手机打开开发者选项,通过录制可以将操作转换为 对应的 python 代码)

app启动参数

desired_caps = {
        "platformName": "Android",
        "deviceName": "3cc56469", 
        "appPackage": "com.tencent.mm",
        "appActivity": ".ui.LauncherUI",
        "automationName": "Uiautomator2",

        # "dontStopAppOnReset" : "True", #不重启 app
        "unicodeKeyboard": "True",  # 使用unicodeKeyboard的编码方式来发送字符串 ,可以实现输入中文
        "resetKeyboard": "True",  # 隐藏虚拟键盘,防止遮挡元素
        "newCommandTimeout": "86400",  # 设置命令超时时间(程序默认启动时间为60秒,60秒无操作程序自动关闭),单位:秒
        "noReset": "True",
        "chromeOptions": {
            "androidProcess": "com.tencent.mm:tools"
        }
    }
  1. Anyproxy(基于 nodejs )
  2. Node js安装完成后 可执行 npm install anyproxy -g,安装完成后,运行指令 anyproxy -i

2.运行成功后访问 http://127.0.0.1:8002/ 进行证书下载(电脑,手机都需要安装),手机需访问 电脑的ip进行下载
(没有CA证书无法抓包)

  1. 安装完成后进入
    C:\Users\电脑用户\AppData\Roaming\npm\node_modules\anyproxy\lib路径下, rule_default.js 修改beforeSendResponse 方法
let list = 200

 beforeSendResponse(requestDetail, responseDetail) {
     sleep(1000);
     Promise.resolve().then(function () {
          if (/mp\/profile_ext\?action=home/i.test(requestDetail.url)) {
                let listNum = list.length;
                console.log("======="+requestDetail.url);
               if(loopNum<listNum) {
                 loopNum++;
                 extracted1(wechat_url, responseDetail);
                 postData(data);
               } else {
                 return null;
               }
          }
          return null;
     });
     return null;
},
  1. 重启 anyproxy
  2. 进行数据抓取
    https://mp.weixin.qq/mp/profile_ext?action=home&__biz=MzU1NDY1NDU5Ng==&secene=123#wechat_redirect (需要变更的数据为biz=后面的参数)
    微信数据推送在 msgList 下
    根据需求自行解析

anyproxy 需添加的代码:

function extracted1(url,responseDetail) {
    console.info(url)
    console.info("================================")
    data = responseDetail.response.body = Buffer.from("<script>setTimeout(function(){window.location.href='" + url +"';},1000);</script>" + responseDetail.response.body);
     data = responseDetail.response.body.toString('utf8');
    data = data.replace(/&quot;/g, '"');
    data = data.replace(/&amp;/g, '&');
    data = data.replace(/&lt;/g, '<');
    data = data.replace(/&gt;/g, '>');
    data = data.replace(/&nbsp;/g, ' ');
    // console.log("当前数据:" +data)
}




/**
 * 发送数据结果(后端接收参数)
 * @param data
 */
function postData(data) {
    let http = require('http');
    let qs = require('querystring');
    let post_data = {
        data: data
    };
    let content = qs.stringify(post_data);
    let options = {
        hostname: '127.0.0.1',
        port: 5000,
        path: '/',
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
        }
    };
    let req = http.request(options, function (res) {
        res.setEncoding('utf8');
        res.on('data', function (chunk) {
            // console.log('BODY: ' + chunk);
        });
    });
    req.on('error', function (e) {
    });
    // 将数据写入请求体
    req.write(content);//注意这个地方
    req.end();
}

下篇文章将介绍 使用 python程序进行手机账号切换的操作
转载请标明出处,感谢

本文标签: 所需 公众 代码 环境 业务