我正在尝试自动从网站下载文件。通常下载文件,我用用户名和密码登录。导航到特定屏幕,然后单击按钮。
我一直在尝试使用Chrome的开发者模式观看POST序列,然后使用.Net WebClient类复制所有步骤,但没有成功。我从WebClient类派生并添加了cookie处理。这似乎有效。我转到登录页面并使用WebClient.UploadValues发布。大约有一半的时间似乎有效。下一步似乎对报告URL进行了另一个POST操作。我再次使用WebClient.UploadValues,但服务器的响应是显示内部错误的页面。
我有几个问题。 1)有没有比手动编码C#代码更好的工具来复制一堆Web浏览器交互?我真的只关心能够在每天的特定时间将文件下载到Windows机器上。 2)WebClient似乎不是最好的类。也许这有点过于简单化了。我尝试使用HttpWebRequest,但它没有用于编码POST请求的工具。还有其他建议吗? 3)尽管Chrome的开发人员插件似乎显示了所有交互,但我发现它使用起来有点麻烦。我有兴趣看到所有原始通信(虽然未加密,但网站只能通过https访问),所以我可以看看我是否真的在复制所有步骤。
我甚至可以发布我正在使用的确切代码。我从中提取数据的网站,特别是标准和Poors网站。他们可以创建自定义报告,用于下载报告所需的历史数据,而不是重新发布。
答案 0 :(得分:1)
与编写C#/ Perl / Java代码以复制http请求相比,使用IE下载文件会更容易。
原因是,即使JavaScript代码稍有变化也会破坏流程。
使用IE,您可以使用COM自动执行它。以下VBA示例打开IS并执行谷歌搜索:
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
答案 1 :(得分: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一起使用,您需要install the Certificates来启用trafffic的解密。