1

我正在尝试自动从网站下载文件。通常要下载文件,我使用用户名和密码登录。导航到特定屏幕,然后单击按钮。

我一直在尝试使用 Chrome 的开发人员模式查看 POST 的序列,然后使用 .Net WebClient 类复制所有步骤,但没有成功。我从 WebClient 类派生并添加了 cookie 处理。这似乎工作。我转到登录页面并使用 WebClient.UploadValues 发布。大约一半的时间它似乎工作。下一步似乎是对报告 URL 执行另一个 POST 操作。我再次使用 WebClient.UploadValues,但来自服务器的响应是显示内部错误的页面。

我有一些问题。1) 有没有比手工编写 C# 代码更好的工具来复制一堆 Web 浏览器交互?我真的只关心能够在每天的特定时间将文件下载到 Windows 机器上。2) WebClient 似乎不是用于此的最佳类。可能有点过于简单化了。我尝试使用 HttpWebRequest,但它没有编码 POST 请求的工具。还有其他建议吗?3) 虽然 Chrome 的开发者插件似乎显示了所有交互,但我觉得使用起来有点麻烦。我有兴趣查看所有原始通信(尽管未加密,该站点仅通过 https 访问),因此我可以查看我是否真的在复制所有步骤。

我什至可以发布我正在使用的确切代码。我从中提取数据的网站,特别是标准普尔网站。他们能够创建自定义报告来下载我需要报告的历史数据,而不是重新发布。

4

2 回答 2

1

与编写 C#/Perl/Java 代码来复制 http 请求相比,使用 IE 下载文件会容易得多。

原因是,即使是 JavaScript 代码的微小变化也会破坏流程。

使用 IE,您可以使用 COM 将其自动化。以下 VBA 示例打开 IS 并执行 google 搜索:

Sub Search_Google()
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")

IE.Navigate "http://www.google.com" 'load web page google.com

While IE.Busy
  DoEvents  'wait until IE is done loading page.
Wend

IE.Document.all("q").Value = "what you want to put in text box"
ie.Document.all("btnG").Click 
'clicks the button named "btng" which is google's "google search" button

While ie.Busy
  DoEvents  'wait until IE is done loading page.
Wend

End Sub
于 2011-03-22T03:41:34.853 回答
0

3) Although Chrome's developer plugin appears to show all interaction, I find it a bit cumbersome to use. I'd be interested in seeing all of the raw communication (unencrypted though, the site is only accesses via https), so I can see if I'm really replicating all of the steps.

为此,您可以使用Fiddler查看所有正在进行的交互以及来回传输的 RAW 数据。要使其与 HTTPS 一起使用,您需要安装证书以启用流量解密。

于 2011-03-22T03:11:58.470 回答