使用HTMLAgilityPack登录网站

c# html-agility-pack login login-script

在下面的代码中,我可以使用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 with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因