2010-08-02 101 views
0

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

为了获得出口,从登录屏幕,该过程如下:

  • 登录
  • 导航到报表Page
  • 点击“扩展细节”链接
  • 选择“扩展“复选框
  • 从列表框中选择扩展名(通常是当前正在使用的所有扩展名)
  • 指定日期范围
  • 点击导出按钮

这不是一个很大的工作,每天做手工,但是,对于可靠性,这将是巨大的,如果我可以让我的应用程序自动执行此操作在第一时间启动每一天。 由于该公司有超过1人将使用此应用程序,因此使用Windows服务会更好。

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

谁能给我一个基本的想法如何做到这一点?

此外,任何人都可以发布链接(如有需要,请留言)到我可以了解更多关于如何做到这一点的网页?

回答

0

有了一个HTTP客户端,你需要做到以下几点:

  • 登录,使用cookie或HTTP认证
  • 请求一个页面
  • 提交表单数据

这意味着在程序中需要一些类或组件,可以执行HTTP,Cookie,身份验证和表单。有了这个,你可以做出与用户相同的请求。

+0

谢谢!我需要的这个项目被取消了,但它肯定需要更多的研究... – 2010-08-04 08:25:59

2

我做了类似于从网站获取信息的内容。我无法给你一个确切的答案。但这个想法是通过表单值将登录信息发送到页面。如果网站是依靠饼干,你可以使用这个cookie意识到Web客户端:

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(窗口)。基本你只是做同样的事情,但要小心会议ID等,这是暂时的。

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

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

加成

的CookieAwareWebClient是不是我的代码:

我也发现了一些相关的主题:

+0

感谢,代码+1,我会试试看 – 2010-08-04 08:25:03