
本文章中所有內容僅供學習交流使用不用于其他任何目的不提供完整代碼抓包內容、敏感網址、數據接口等均已做脫敏處理嚴禁用于商業用途和非法用途否則由此產生的一切后果均與作者無關本文章未經許可禁止轉載禁止任何修改后二次傳播擅自使用本文講解的技術而導致的任何意外作者均不負責若有侵權請在聯系作者立即刪除沒什么技術含量的文章。事情的起因是老板想要1688所有賬號的每日詢盤客戶和聊天記錄。寫這篇文章主要也是為了以后的同事接手項目后遇到更新時能順著文章的思路更新項目不至于整個項目重寫。技術選型懶得逆向就采用了以下技術。playwright每個賬號首次登入時需要手動登入(要手機驗證碼)登入成功和任務結束會調用context.storage_state(pathstate_file)保存賬號所有信息無需刻意賬號保活。后續啟動會使用已保存賬號文件進行啟動跳過登入。當然也可以使用指紋瀏覽器類似紫鳥這種直接管理賬號。page.evaluate控制臺執行js來發送請求跳過加密和請求頭設置只需傳入參數。websockets連接聊天獲取聊天記錄詢盤客戶window暴露了一個window.lib.mtop.request的方法。使用page.evaluate調用request傳入對應參數就能獲取結果。當此接口調用失敗時需要你檢查window.lib.mtop.request是否還存在傳參是否進行了更新。聊天記錄進入聊天頁面會發起一個wss請求websockets連接后發送第一個數據包就能獲取數據。接下來我會告訴你每個參數都是怎么來的遇到數據獲取失敗后如何去排查每個參數是否更新。app-key固定值可能會更新mid隨機數這要是更新了只能你自己去js里面找了要是會逆向那真的不要太簡單didtoken使用page.evaluate調用以下接口返回就是token直接搜索token值也能找到具體接口。至于did前半部分是localStorage中的im_sdk_did后半部分就是時間戳。特別需要注意獲取token接口中的id和wss發送數據的id是需要相同的。然后就是發送數據包獲取返回就行每隔個15s發送一個心跳包就沒了。