亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python如何實現逆向微信指數爬取

發布時間:2022-02-10 14:27:40 來源:億速云 閱讀:365 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關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如何實現逆向微信指數爬取

感謝各位的閱讀!關于“python如何實現逆向微信指數爬取”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

青州市| 定西市| 宜宾县| 涡阳县| 会泽县| 新化县| 鄢陵县| 鄂温| 张家界市| 武威市| 兴安盟| 剑阁县| 商丘市| 井陉县| 灵璧县| 濮阳市| 长阳| 元朗区| 瓦房店市| 广丰县| 青岛市| 株洲县| 登封市| 嘉兴市| 龙井市| 临颍县| 陵川县| 和静县| 白朗县| 舞钢市| 射阳县| 东光县| 广南县| 七台河市| 方山县| 吉林市| 青龙| 原平市| 定陶县| 拜城县| 丰县|