簡體   English   中英

從需要登錄的頁面獲取網頁源代碼的最簡單方法 — C#

[英]Easiest way to get web page source code from pages that require logins — C#

所以我玩一個基於網絡的在線游戲,我想使用 C# 用它自動化某些事情。 問題是我不能簡單地使用 WebClient.DownloadData() 因為我需要登錄才能實際接收源。 另一種選擇是使用內置的 Web 瀏覽器控件,但這並不能讓我訪問源代碼。 有什么建議?

我認為 NetworkCredentials 不會在所有情況下都有效。 這僅適用於“基本”或“協商”身份驗證。

我之前在一個內部網站上做過一些負載測試,但聽起來你是在嘗試“玩”游戲。 出於這個原因,我不會詳細介紹,但是當您點擊登錄按鈕時,可能會以 HTTP POST 的形式登錄該站點。

您必須捕獲 POST 請求並將其復制到您的代碼中,並確保您的實現也保持會話狀態,因為如果游戲站點編寫得很好,它將確保當前會話之前已登錄做任何游戲相關的事情。

您可以在調用DownloadData之前使用其Credentials屬性在 webclient 上設置登錄憑據:

WebClient client = new WebClient();
client.Credentials = new NetworkCredential("username", "password");

編輯:正如 mjmarsh 指出的那樣,這僅適用於使用質詢響應身份驗證方法作為單個請求的一部分的站點(我已經習慣在工作中處理這個問題,我沒有考慮其他類型! )。 如果站點使用表單身份驗證(或任何其他形式的身份驗證),則此方法將不起作用,因為身份驗證不是單個請求的一部分 - 需要您需要自己處理的多個請求。

正如 mjmarsh 已經指出的那樣,網絡憑據將不起作用。

在抓取網頁時,我們會遇到很多需要登錄的頁面。 我使用的方法之一是安裝 fiddler 並在手動登錄站點時監視 POST 和 GET 數據包。 這使您可以了解瀏覽器如何模擬登錄。 然后你需要通過代碼重新創建相同的過程。

例如,大多數 Web 服務器使用 cookie 來假設會話已通過身份驗證。 因此,您可以使用憑據在網站上發布用戶名和密碼並記錄 Cookie。 然后可以使用此 cookie 訪問網站上的任何進一步詳細信息。

請查看以下鏈接以了解有關高級網頁抓取的更多信息:

http://krishnan.co.in/blog/post/Web-Scraping-Yahoo-Mail.aspx

在本博客中,您將了解如何通過身份驗證進入雅虎帳戶,然后在身份驗證后閱讀頁面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM