使用HTMLAgilityPack登錄網站


在下面的代碼中,我可以使用HTMLAgilitypack設置用戶名和密碼的值,但是我無法調用登錄按鈕的click事件(按鈕的源代碼中的id是“s1”)。

無論如何要做到這一點?我沒有使用WebBrowser的原因是因為我需要HTMLAgilityPack來從頁面中檢索沒有ID的數據。

var doc = new HtmlWeb().Load("http://MYURL.com");
doc.DocumentNode.SelectSingleNode("name").SetAttributeValue("value", "MyUsername");
doc.DocumentNode.SelectSingleNode("password").SetAttributeValue("value", "MyPassword");

一般承認的答案

無論如何要做到這一點?

不是HTML Agility Pack(HAP)庫提供的 - 而不是直接。

HAP非常適合獲取單個頁面並對其進行解析,但它不是為繼續交互而設計的。缺少的是cookie管理,JavaScript交互等等。

為了登錄,您可能需要向服務器發送HTTP POST,包括您想要的數據 - HAP無法幫助您。

您將需要使用類似WebRequest的類來發布帖子 - 我建議查看fiddler並使用它來查看請求應該是什麼樣子並相應地構建它,儘管這可能只是第一步。

您可能想要研究使用網絡自動化工具,例如seleniumWatiN


熱門答案

您需要通過fiddler觀察POST請求並查看其結構。例如 :

    {"userName":"you","password":"pwd"}

通常,站點會通過在您的請求中接收cookie來識別您已登錄。

默認情況下, HttpClient會將從每個順序請求從特定域收到的cookie發送到該域(直到您處置該HttpClient實例)

1)創建一個cookie容器並將其分配給您的HttpClient實例。

2)使用HttpClient進行登錄POST請求。

3)使用HttpClient進行數據GET請求。

4)從響應中讀取html字符串。

5)使用HtmlAgilityPack HtmlDocument從html字符串加載文檔而不是從Web加載文檔(如大多數示例所示)。

    {"userName":"you","password":"pwd"}




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