使用powershell自动从网站下载文件(不知道文件的URL)

时间:2010-02-09 15:38:37

标签: powershell

我希望每天从信用卡提供商的网站上下载报告。

该文件是动态生成的,因此我不知道文件本身的实际URL。

我可以使用powershell导航并登录网页,并点击“下载报告”按钮。但随后出现“文件下载”对话框,我无法弄清楚如何按下该对话框上的“保存”按钮。

似乎我的选择是:

  • 以某种方式找到该窗口,并尝试发送击键

  • 在对话框出现时以某种方式查找文件的URL,然后直接下载。

  • 找到一种方法来禁用ie中的“文件下载”框。 (把它放在可信赖的网站上没有用)

我正在使用:

$ie = New-Object -com "InternetExplorer.Application"

您认为最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

为此目的,最好的选择是要求提供者(如果可能)发布一些API。

为此目的,发送击键非常脆弱。 点击保存后的内容?将打开一个对话框,您应该导航到一个文件夹并单击确定。这意味着您需要再次找到窗口。如果有一些类似的窗口打开怎么办?你的脚本能找到合适的窗口吗? (对于需要隐藏/显示/查找窗口并发送击键的其他场景,我建议Autohotkey。)

其他可能性取决于它是什么网站。似乎该文件是作为对POST命令的响应而生成的。这意味着您没有可以下载的直接链接。即使有链接,也可能无法通过Net.WebClient下载,因为您不会发送任何身份验证信息(会话cookie或查询字符串中的会话ID)。你需要解析,例如来自$ie.Document.cookie的Cookie并将其添加到请求中。

但是,在某些情况下,您可以使用[System.Net.WebRequest]$webRequest = [System.Net.WebRequest]::Create($url);并指定POST方法和数据并等待响应(这将是文件)。这会模仿点击提交按钮。但是,如果没有凭据,它可能会失败。

如果无法访问该网站,则很难再说些什么。

答案 1 :(得分:2)

如果您绝对需要以编程方式与应用程序进行交互,我建议使用类似http://www.codeplex.com/white

的内容

该库提供了.NET 3.5

提供的一些自动化功能的包装器

如上所述,最好的方法是使用Net.WebClient而不是IE的实例。 如果您需要重建GET或POST请求,您可以使用Firebug来检查供应商提供的页面。