从安全网站刮取数据或自动执行普通任务

时间:2011-02-28 17:47:09

标签: .net ssl screen-scraping

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

一旦我有一个有预订的控制面板。每个预订都有一个详细信息页面的链接,其中包含预订人员的电子邮件地址。

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

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

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

这将由非技术人员起诉,因此这不是最佳选择。

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

4 个答案:

答案 0 :(得分:2)

无论您是通过HtmlAgilityPack查询网页还是直接使用HttpWebRequest课程(HtmlAgilityPack使用它),您都应该知道:如何处理< EM>缓存

这基本上是你应该遵循的步骤:

  • 加载您要登录的页面
  • 使用 POST 方法(用户名,密码或任何页面请求)提交所需信息以登录
  • Cookie 保存在响应中,并从现在开始使用这些 Cookie
  • 请求包含 Cookie 的网页,并使用HtmlAgilityPack解析。

使用HtmlAgilityPack时我总是这样做:使用HttpWebRequest向网站发送请求,而不是使用Load(..)类的HtmlWeb方法执行此操作

请记住,Load类中HtmlDocument方法的其中一个参数会收到Stream。您所要做的就是传递response流(由request.GetResponseStream()获得),您将拥有所需的HtmlDocument对象。

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

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

修改:

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

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

编辑2:

如果您只需要一个脚本来通过浏览器自动化它,请查看WatiN库。在你看到一两个如何使用它的例子后,我相信你能自己运行它; - )

答案 1 :(得分:0)

您可以查看Firefox宏:http://www.iopus.com/imacros/firefox/

另一种选择是在Winforms应用程序中托管WebBrowser控件,以便用户可以使用验证码登录。登录后,可能会废弃所需的数据。

答案 2 :(得分:0)

要废弃.NET中的网站,有Html Agility Pack

以下是解释如何使用它进行登录的链接:Using HtmlAgilityPack to GET and POST web forms

答案 3 :(得分:0)

对于自动化屏幕抓取,Selenium是一个很好的工具。有两件事 - 1)安装Selenium IDE(仅适用于Firefox)。 2)安装Selenium RC Server

启动Selenium IDE后,转到您尝试自动执行的站点,并开始记录您在站点上执行的事件。将其视为在浏览器中录制宏。然后,您将获得所需语言的代码输出。

您知道Browsermob使用Selenium进行负载测试以及在浏览器上自动执行任务。

我已经上传了一段我曾经做过的ppt。这可以为您节省大量时间 - http://www.4shared.com/get/tlwT3qb_/SeleniumInstructions.html

在上面的链接中选择常规下载选项。

我花了很多时间搞清楚,所以认为这可以节省一些人的时间。