還在用WebBrowser嗎?你out了!
2020-07-29 07:42 極無憲 閱讀(263) 評論(0) 收藏 舉報背景:
最近想抓取自己在某后臺的數據發布情況,只在登錄那一步就把我搞蒙了,一堆請求,不知道做了什么操作。登錄的數據也做了加密,甚至我都沒有找到對應的js在哪個地方對登錄信息進行了加密。跟蹤網絡請求情況跟蹤到了相應的數據。但是無從下手,放棄了采集的想法,改用最古老的方式。手動登錄后,跳轉到要獲取數據的頁面,把當前頁面相關數據采集下來。
嘗試的方法:
1、使用iframe嵌入想要采集的頁面
在一個主的頁面嵌入iframe,通過主頁面獲取iframe里面的內容。這是我最初的想法,想想挺美,我還可以在自己的后臺嵌入這個頁面,操作人員直接登錄后臺就可以就行相應的操作。
經過測試之后此方法行不通,因為存在跨域問題,主頁面與子頁面無法通訊,雖然可能通過相關的技術可以實現跨域的問題,但僅限于主頁面與子頁面都是受你控制的情況下。我調用的別人家后臺,別人家的后臺頁面我無法操作,放棄了這種操作。
2、登錄后臺頁面,使用WebBrowser獲取相應的數據
該頁面使用的技術太潮了,WebBrowser不支持,登錄頁還能展示,登錄就去之后大大的空白頁,可能是js執行出錯,導致頁面顯示不出來,又放棄了。
3、只能使用CEF了
完美的解決WebBrowser遇到的問題。
數據能夠正常展示之后,手動跳轉到要獲取數據的頁面,調用頁面內容,通過正則表達式的方法獲取相應的數據。
var result= wb.GetSourceAsync().Result;//調用頁面內容
還有可以優化的地方——偵聽network訪問情況,直接抓取json數據。
如果能夠做到這樣就不需要對頁面進行正則表達式匹配了,效率更高。網上找到一些方法,我用的最新版本的CEF現在結構發生了變化,已經不再適用,等我有空再研究研究。
浙公網安備 33010602011771號