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