从网页中检索信息

时间:2010-08-02 12:48:27

标签: html vb.net

我的申请旨在加快从我们的电话系统中检索电话信息。 获取此信息的最佳方法是在电话系统的Web界面上创建新搜索,并将结果导出到Excel电子表格,然后我的应用程序将其导入到DataSet中。

要获取导出,请从登录屏幕进行以下操作:

  • 登录
  • 导航至报告页面
  • 点击“扩展程序详细信息”链接
  • 选择“扩展”复选框
  • 从列表框
  • 中选择扩展名(通常是当前正在使用的扩展名)
  • 指定日期范围
  • 点击导出按钮

每天手动完成这项工作并不是一件大事,但是,为了可靠性,如果我能让我的应用程序在每天第一次启动时自动执行此操作,那将会非常棒。 由于公司中有超过1人将使用此应用程序,因此使用Windows服务会更好。

我不知道它是否有帮助,但系统是Datatex Topaz新一代电话管理系统:http://www.datatex.co.za/downloads/index.html#TNG

有人能给我一个基本的想法吗?

此外,任何人都可以将链接(在评论中,如果需要)发布到我可以了解更多有关如何执行此操作的页面吗?

2 个答案:

答案 0 :(得分:2)

我做过类似于从网站上获取信息的内容。我无法给你一个确切的答案。但我们的想法是将登录信息发送到带有表单值的页面。如果网站依赖于cookie,您可以使用此cookie感知WebClient:

public class CookieAwareWebClient : WebClient
{
    private CookieContainer cookieContainer = new CookieContainer();

    protected override WebRequest GetWebRequest(Uri address)
    {
        WebRequest request = base.GetWebRequest(address);
        if (request is HttpWebRequest)
        {
            (request as HttpWebRequest).CookieContainer = cookieContainer;
        }
        return request;
    }
}

你应该知道有些网站依赖于传递的会话ID,所以我做的第一件事就是从页面中获取会话ID:

var client = new CookieAwareWebClient();
client.Encoding = Encoding.UTF8;

var indexHtml = client.DownloadString(*index page url*);

string sessionID = fetchSessionID(indexHtml);

然后我必须登录到您可以通过将值上传到页面来执行的页面。您可以使用“查看源”查看特定的表单元素,但您必须知道一些HTML才能执行此操作。

var values = new NameValueCollection();
values.Add("sessionid", sessionID); //Fetched session id
values.Add("brugerid", args[0]); //Username in my case
values.Add("adgangskode", args[1]); //Password in my case
values.Add("login", "Login");   //The login button

//Logging in
client.UploadValues(*url to login*, values); //If all goes perfect, I'm logged in now

然后我可以下载我需要的页面。在您的情况下,如果文件始终具有相同的URL(例如Export.aspx?From = 2010-10-10& To = 2010-11-11)或UploadValues(...),则可以使用DownloadFile(...)您可以像以前一样指定值,但保存结果。

string html = client.DownloadString(*url*);

看起来你的步骤比我做的要多得多。但原则是一样的。要查看您发送到站点登录等的值,您可以使用Fiddler(windows)等程序来捕获正在进行的活动。基本的,你只是做同样的事情,但要注意会话ID等,这是暂时的。

最好的想法是使用一些本地方式来获取数据,但如果没有得到代码,数据库等,你必须以丑陋的方式去做。您可能还需要一个HTML解析器来获取数据( ups,您没有,因为您导出到文件)。最后但同样重要的是,请记住,页面可能会发生变化,并且很有可能无法登录,解析等。

请询问您是否不确定发生了什么。

<强> ADDITION

CookieAwareWebClient不是我的代码:

我还找到了一些相关主题:

答案 1 :(得分:0)

使用HTTP客户端,您需要执行以下操作:

  • 使用Cookie或HTTP身份验证登录
  • 申请页面
  • 提交表单数据

这意味着您需要程序中可以执行HTTP,cookie,身份验证和表单的某些类或组件。有了这个,您就可以执行用户所做的相同请求。