.net - 从安全网站抓取数据或自动执行日常任务

标签 .net ssl screen-scraping

我有一个网站,需要使用用户名和密码以及验证码登录。

进入后,我有一个包含预订的控制面板。对于每个预订,都有一个指向详细信息页面的链接,其中包含进行预订的人的电子邮件地址。

每天我都需要一份包含所有这些电子邮件地址的列表,以便向他们发送电子邮件。

我知道如何在 .NET 中抓取网站以获取这些类型的详细信息,但我不知道如何抓取需要登录的网站。

我看到一篇文章,其中我可以将 cookie 作为 header 传递,这应该可以解决问题,但这需要我在 firebug 中查看 cookie 并将其复制并粘贴。

这会被非技术人员起诉,所以这并不是最好的选择。

我在想的另一件事是他们可以运行的脚本在浏览器中自动执行此操作?有关如何执行此操作的任何提示?

最佳答案

无论您是否通过 HtmlAgilityPack 查询网络,您都应该知道一些事情或使用 HttpWebRequest直接类(HtmlAgilityPack 使用它):How to handle Cookies

基本上,您应该遵循以下步骤:

  • 加载你想登录的页面
  • 使用 POST 方法提交登录所需的信息(用户名、密码或页面请求的任何内容)
  • 在响应中保存 Cookie,并从现在开始使用这些 Cookie
  • 用那些 Cookies 请求页面并用 HtmlAgilityPack 解析它.

这是我在使用 HtmlAgilityPack 时经常做的事情: 使用 HttpWebRequest 向网站发送请求而不是使用 Load(..) 执行此操作HtmlWeb的方法|类

算上Load的参数之一HtmlDocument 中的方法类收到 Stream .您所要做的就是通过 response流(通过 request.GetResponseStream() 获得),您将拥有 HtmlDocument您需要的对象。

我建议你安装 Fiddler .这是一个非常好的工具,可以从您的浏览器或您的应用程序检查 HTTP 请求/响应。

运行 Fiddler ,并尝试通过浏览器登录网站,看看浏览器向页面发送了什么以及页面返回了什么,这正是您需要使用 HttpWebRequest 模拟的内容。类。

编辑:

这个想法不仅仅是在 header 中传递静态 Cookie。必须是登录后页面返回的Cookie

要处理 Cookie,请查看 HttpWebRequest.CookieContainer属性(property)。这比你想象的要容易。您需要做的就是声明 CookieContainer变量(空),并在向网站发送任何请求之前将其分配给该属性。当网站做出响应时,Cookie 应自动添加到该容器中,以便您下次请求该网站时能够使用它们。

编辑2:

如果您只需要一个通过浏览器自动执行的脚本,请查看 WatiN图书馆。我相信在您看到一两个如何使用它的示例后,您将能够自己运行它;-)

关于.net - 从安全网站抓取数据或自动执行日常任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5145535/

相关文章:

.net - 使用 System.IdentityModel.Tokens.Jwt 解码和验证 JWT token

Wordpress:重定向 URL 问题

java - 使用 Java 通过带有证书的 https 使用 RESTful 服务

python - python中的简单forvalues循环?

programming-languages - 屏幕抓取效率

c# - SQL Server STDistance 的 .NET 等价物

c# - 将页面呈现为图片

c# - 有没有办法自定义 OpenFileDialog 来选择文件夹而不是文件?

ssl - 使用负载平衡器终止 TCP/IP 连接的 TLS

python - 如何打印 BeautifulSoup 收集的数据?