本來昨天就要發文章的了,因爲以前的pdd文章被投訴了,刪除了,影響心情的同時也不敢亂髮文章了,因此就暫時歇了一天,也改了另一個網站,就是今天的物流網站。若是你們某天看不到我發文了,估計我也是被舉報完了,到時想要看的能夠去個人GitHub上看。python
獻上GitHub:https://github.com/SergioJune...git
對你有用的話,但願能點個star,謝謝github
今天網站:https://www.17track.net/zh-cnchrome
這是個物流網站,就是查詢物流的,今天要作的就是根據單號查詢物流,廢話很少說,直接肝。數組
這裏咱們查詢一個單號,也能夠批量查詢,參數都差很少,長度變了而已,因此演示就只查詢一個單號。瀏覽器
打開了開發者工具你慢慢找,很容易就找到這個請求。微信
須要的數據就是這個快遞軌跡,看到上面的 formdata 好像沒什麼問題,挺容易的,這還有什麼比這爽的,趕忙使用 python 請求一波。cookie
結果返回了這個,果真沒有想象中的那麼簡單,估計又是在cookie上面作了反爬,那咱們就加上cookie試試app
果不其然,真的成功了,通過個人測試,發現須要的cookie 鍵是 ,那接下來就是看怎麼生成的了。ide
上面知道了是哪一個 cookie 反爬的,最簡單的尋找就是全局搜索這個參數來看看有沒有線索。
果真有,並且文件名字和請求的路徑名有幾分類似,按經驗來講八九不離十就是這個了,點擊進去看看。
格式化就能夠看到上圖的代碼,一眼看去,這代碼很像我以前這篇請求網頁時,怎麼給我返回了一段 JavaScript 代碼,都是前面一個大數組,而後在一個地方把這個數組的順序,而後經過一個函數來將這個數組的元素來解密成正常的函數名。接着就是檢測你有沒有展開代碼之類的,展開了就會內存爆破,具體的均可以看看我剛說的這篇文章。
有了上次的經驗,我就直接在瀏覽器上格式化直接調試了,不把代碼複製到本地運行了。
瞭解了這麼多,就是開始調試了,因爲咱們須要找的 cookie肯定是在這個文件內生成,可是還不知道在哪生成,因此須要調試下。
涉及到 cookie, 須要先把瀏覽器的cookie清除才行
點擊 clear site data 便可清除,不放心的就點多幾回。
接着就是在調試欄的右邊的 watch 添加咱們監聽的變量,咱們須要監聽 cookie 的變化,因此點擊 + 號添加 document.cookie 便可。
接着打斷點的位置就在咱們搜索到 cookie 值的位置上添加便可
接下來就是刷新網頁,等待程序跳到斷點的位置
這時看到 cookie 的值是空的,在 application 上看的 cookie 也是空的
接着就是按下斷點執行下一行語句,不會的先自行百度,這個調試確定得學會的,這裏就很少說了,或者我過兩天有時間寫篇 chrome 調試供你們參考下。
如今就是漫長的調試尋找加密的時間了,通過個人查找,很快就能夠看到這個了。
下面的那句明顯就是設置 cookie 的,能夠本身複製語句到 console 上運行一次
這樣子就找到生成位置了,如今就是查看右邊的調用棧,查看是在哪一個地方開始執行的,看看他們之間的調用關係。
在上面的cookie 生成能夠看到是一個數組,而後使用 join() 來鏈接起來的
咱們能夠觀察這個數組在哪裏生成和賦值的,也經過調用棧能夠看到參數生成地方是在這裏
咱們能夠先把這個語句所在的函數扣出來
發現裏面的函數有些 document 對象,又由於這個是主函數,因此能夠修剪下,把那些判斷語句和捕捉異常的都給去掉,就是在原文件中看判斷語句的真假運行的哪一個語句就保留,而正常運行不會產生異常,因此把處理異常的也給去掉,就成了這個樣子。
而後直接使用瀏覽器打開運行查看錯誤
而後對比原文件中的參數 ,發現這個是咱們傳的 formdata,因此爲了測試先賦值一個便可。
接着是這個錯誤,這個未定義,也是在原文件中看他的定義處便可。能夠這樣看
點擊上面箭頭所指的地方便可到達定義。
直接到達這裏,看到了他的定義,因此直接從這裏扣出來到最後定義完之處便可,再次刷新,看到變成了另外一個錯誤
也是在原文件中找定義便可
這是個解密函數,就是我上文說的將加密數組元素解密成正常的函數名,直接扣出來便可,同時咱們還須要找個數組,就是第一行的。
再次刷新,瀏覽器卡了起來,甚至出現了崩潰
這就是所謂的內存爆破,這時由於裏面有個函數檢測到了你展開了代碼,因此就來內存爆破,這個都是我在請求網頁時,怎麼給我返回了一段 JavaScript 代碼這裏獲得經驗的,若是你須要調試尋找的話,能夠先在咱們扣出來的代碼隨便寫個錯誤,在文件代碼出現,而後在第一行加上斷點進行調試便可,剩下的就是本身一步一步調試找出內存爆破位置了。
因爲說過了,就很少說了,突破了繼續刷新也會遇到一些未定義的,也是一樣扣代碼,就很少說了,這裏說另外一個。
這裏明明已是定義了,卻顯示未定義,打了斷點一看,原來是函數名字都是亂碼的
這是由於咱們在第一行定義的數組是亂序的,須要還原下,這個須要本身一步一步調試查看原文的,我這裏就直接說了
裏面能夠打上斷點查看便可。
剩下的仍是重複原來的步驟,查看錯誤,扣代碼便可,因爲篇幅這裏就很少說了,有問題能夠去公衆號「平常學python」菜單欄加我微信拉進交流羣交流。
這裏仍是使用 PyExecjs 庫來執行 JS 獲取cookie值,若是還原成python 語言成本太大了,不適合。
代碼也沒有什麼的,具體的能夠去 github:https://github.com/SergioJune... 上面看
這篇文章昨天就想發了,無耐太累,就一直拖到今天了,有點對不起讀者,還有 pdd 的已經被刪除了,想看的能夠去 github 上看。
最後,原創不易,但願你們多點贊多轉發分享給你的好友,點贊轉發越多,我就寫得越多!!!