在c#中模擬無限滾動以獲取頁面的完整html

c# html-agility-pack infinite-scroll

有很多網站使用這種(imo)惱人的“無限滾動”風格。例如tumblr,twitter,9gag等網站。

我最近嘗試使用HtmlAgilityPack以編程方式從這些網站中刪除一些圖片。喜歡這個:

HtmlWeb web = new HtmlWeb();  
HtmlDocument doc = web.Load(url);
var primary = doc.DocumentNode.SelectNodes("//img[@class='badge-item-img']");
var picstring = primary.Select(r => r.GetAttributeValue("src", null)).FirstOrDefault();

這工作正常,但當我嘗試從某些網站加載HTML時,我注意到我只收回了少量內容(比如說前10個“帖子”或“圖片”,或者其他什麼......)我想知道是否有可能在c#中模擬頁面的“向下滾動”。

這不僅僅是我以編程方式加載html的情況,當我只是去tumblr這樣的網站時,我檢查firebug或只是“查看源代碼”,我預計所有的內容都會在某處,但很多好像是用javascript隱藏/插入。 HTML源中只顯示我的屏幕上實際可見的內容。

所以我的問題是:是否可以模擬無限滾動到頁面,並用c#(最好)加載到HTML中?

(我知道我可以使用API​​用於tumblr和twitter,但我只是想和HtmlAgilityPack一起玩一些有趣的黑客攻擊)

熱門答案

除了嵌入網絡瀏覽器(通常無法在無頭環境中工作)之外,沒有辦法一次性可靠地為所有這些網站做到這一點。

您應該考慮做的是查看網站的JavaScript,以便在用戶向下滾動時查看用於獲取內容的AJAX查詢。

或者,在瀏覽器中使用Web調試器(例如Chrome中包含的調試器)。這些調試器通常具有“網絡”窗格,您可以使用它來檢查頁面執行的AJAX請求。在向下滾動時查看這些請求應該為您提供足夠的信息來編寫模擬這些請求的C#代碼。

然後,您必須解析來自這些請求的響應,因為特定API提供的內容類型可能是JSON或XML,但幾乎肯定不是HTML。 (無論如何,這可能對你更好,因為它將節省你必須解析面向顯示的HTML,而AJAX API將為你提供更容易使用的數據對象。)




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因