0

我有一个系统,基本上可以将其他数据库中的数据复制到我自己的 SQL Server 中,这样我就可以格式化数据以满足我的需要。该数据用于填充下拉列表以最终得到一个变量,该变量可以返回我想向用户显示的行。

到目前为止,我遇到的所有数据库都有一种存储下拉菜单数据的逻辑方式。但现在我有一个不同的,不合逻辑的。

我想要做的是使用现有的网站,它本身提供了一个有点逻辑的下拉菜单来获取我需要的数据。该下拉列表在选择后填充多选下拉列表。

我想在第一个下拉列表中选择每个选项,然后读取它放入第二个多选下拉列表中的数据。有没有办法做到这一点?

4

1 回答 1

0

您本质上想要做的是网络抓取。在一个类似的项目中,这就是我所做的:

  1. 使用 .NET 中可以发送 http 请求和接收 http 响应的可用对象。就我而言,我使用了 WebClient:

        byte[] response;
        using (var client = new WebClient())
        {
            try
            {
                response = client.UploadValues(URL, "POST", postData);
            }
            catch (Exception ex)
            {
                // Log error here                  
            }
        }
    
  2. 看到 postData 了吗?这是一个NameValueCollection包含在您执行 POST 时由页面发送的数据。使用Fiddler或类似工具找出需要包含哪些数据。如果页面使用 .NET Web 表单,您可能需要为 __VIEWSTATE 做一些特殊的事情,比如做一个示例请求并从那里获取 __VIEWSTATE 值。这是 postData 的示例:

        var postData = new NameValueCollection();
        postData.Add("__EVENTTARGET",  "");
        postData.Add("__EVENTARGUMENT", "");
        postData.Add("__VIEWSTATE", "");
    
  3. 使用HtmlAgilityPack轻松“解析”您在发布时获得的响应。使用 Xpath,您将能够在第二个下拉列表中获取新项目。

        var doc = new HtmlDocument();
        doc.Load(new MemoryStream(requestBytes));
        return doc;
    
于 2012-06-07T01:55:29.977 回答