<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Appium + mitmproxy + 網易mumu安卓模擬器實現微信指數小程式爬取
通過appium實現將指令傳輸給手機進行相關的操作,mitmproxy執行Python指令碼過濾出相關的請求,安卓模擬器取代真機使專案可以更好的落地。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install node
檢查node是否安裝成功
node -v
sudo bash sudo curl -L https://npmjs.org/install.sh | sh
檢查npm是否安裝完成
npm -v
連結: android-sdk-macosx.
下載完成因sdk缺少對應的platform-tools和build-tools 執行命令在彈出視窗進行勾選下載platform-tools和build-tools
去官網下載:下載地址為直接下載dmg去安裝
連結:JDK
可參考以下設定
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
檢查已有的環境是否都已成功
npm install -g appium-doctor
安裝完成appium-doctor 在終端輸入appium-doctor命令自動檢查appium所依賴的包是否有缺失
npm install -g appium
appium -v 檢視版本號
(抓包,中間人代理工具、支援SSL)
brew install mitmproxy
具體用法自行研究 本文只是簡單的使用
官網直接下載 有Mac版的
appium
adb devices
首次需要先連線到模擬器 網易mumu埠號為7555 終端輸入
adb connect 127.0.0.1:7555
將該證書開啟在鑰匙串中找到修改全部信任
然後在模擬器中安裝 開啟模擬器的設定—安全—從SD卡安裝
開啟內部儲存空間—MuMu共用資料夾—將信任的證書拖進去即可
編寫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取出寫入到本地檔案
到了這一步大家應該已經知道微信指數小程式的爬取方式了 在這裡說下生成search_key介面的觸發規則:首次進入微信指數小程式 2.三十分鐘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頁面元素進行定位
通過appium將模擬點選的指令操控模擬器進行點選進入微信指數的小程式觸發search_key介面的生成,然後通過mitmdump -s xx.py程式進行過濾出相應請求將響應中的search_key進行持久化 爬取資料的時候還是使用scrapy (直接使用模擬器爬取不是好的方法)。方案可能不是最好的但是比直接破解微信登入介面、js_code(生成search_key的必要引數) 要好很多了
以上就是python逆向微信指數爬取實現步驟的詳細內容,更多關於python逆向微信指數爬取的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45