上一個文章研究的是fidder抓取抖音用戶信息的,有興趣可以點開我的頭像看上次的帖子。帖子回復的不多,大多數人回復說竟然看不懂。這次再來聊一聊。
盡量用通俗的語言說一下,可能我說的有些錯誤,首先說一下fidder,fidder的功能很強大,可以截取手機模擬器裏抖音與伺服器之間的網路請求數據,我們要抓的是https協議請求。現在瀏覽的網站都多數是http和https請求,https就是比http請求要安全很多,截取https需要安裝證書,fiider有自帶的證書,下載下來安裝到安卓模擬器即可。具體細節百度咯,安裝好過後fidder上就看到抖音的各種網路請求了。
現在上圖我們看到了抖音的各種網路請求,我們看看數據類型為MP4的鏈接複製出來,點擊右鍵複製url,複製到瀏覽器打開.
嘿嘿嘿,沒有水印的呀,接下來我就開始研究怎麼把這個視頻保存下來呢?一開始想保存這個視頻網址,但是過幾天就涼涼了,403錯誤,沒有許可權訪問了。只能保存文件了,找到思路跟上一個帖子一樣的,找到請求網址的規律
發現視頻網址的host地址有好幾個,本來是構建數組的,判斷oSession.host在不在那個數組裡面,但是出現了不能訪問靜態內容的錯誤,只能用 或 判斷了,跟javascript的語法差不多,還好fidderscript有自動補全,輸入oSession.Save ,後面會有很多選項,然後就把所有的返回內容都保存下來了。
最大的就是MP4了,把後綴名改成MP4就能直接播放了。。接下來就要循環讀取這個文件了,有點問題暫時還沒有解決,我寫的python讀取文件的腳本可能只會讀取到文件的一半,很少的文件不能播放,因為fidder存文件不能一瞬間存完把,需要時間。只能把按鍵精靈的腳本滑動延遲調到十秒才能減少不能播放的文件。
import time import os l= while True: # 二進位的讀取第一行 with open("E:\apytemp\ResponseBody.mp4",rb) as f: detail=f.readline() # 判斷是否重複 if detail==l: pass else: # 判斷文件大小是否大於500k if os.stat(E:\apytemp\ResponseBody.mp4).st_size>500: # 以時間設置文件名稱 now = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time())) # 讀文件 with open("E:\apytemp\ResponseBody.mp4", rb)as e: str = e.read() # 換個文件夾存文件 with open(video\ + now + ".mp4", "wb") as q: q.write(str) print("ok") time.sleep(0.5) else: pass l = detail time.sleep(1)
接下來寫個按鍵精靈的小腳本,模擬人工點擊滑動,清除緩存,重啟app,寫了小個界面。
Dim intX,intY Dim tb1,tb2 tb1 = ReadUIConfig("輸入框1") tb2 = ReadUIConfig("輸入框2") //劃 Do For tb1 Swipe 120, 300, 120, 100 Delay tb2*1000
Next Call qc() Loop //清除緩存 Function qc()
Tap 292, 466 Delay 1000 FindMultiColor 0,0,0,0,"B1ADAC","2|0|B1ADAC,4|0|B4B0AF,-2|0|B5B1B0,-23|-1|B6B2B1,-51|-2|483E3C,-52|-2|9B9594,-74|5|9F9A99,-77|5|483E3C,-77|4|483E3C",0,0.9,intX,intY If intX > -1 And intY > -1 Then Tap intX, intY Delay 1000 Tap 38, 335 Delay 1000
End If Tap 263, 314 Delay 1000 Tap 54, 234 Delay 2000 Call cq()
End Function //重啟 Function cq() KillApp "com.ss.android.ugc.aweme" Delay 5000 RunApp "com.ss.android.ugc.aweme" Delay 10000 End Function
昨天晚上掛了一晚上,早上按鍵精靈調試模式暫停了,下個400多個,有幾個不能播放。先上傳到阿里雲裡面準備弄個網站或者小程序玩玩
代碼:koala9527/douyin,微信公眾號也會同步:Pythontest