我希望每天从信用卡提供商的网站上下载报告。
该文件是动态生成的,因此我不知道文件本身的实际URL。
我可以使用powershell导航并登录网页,并点击“下载报告”按钮。但随后出现“文件下载”对话框,我无法弄清楚如何按下该对话框上的“保存”按钮。
似乎我的选择是:
以某种方式找到该窗口,并尝试发送击键
在对话框出现时以某种方式查找文件的URL,然后直接下载。
找到一种方法来禁用ie中的“文件下载”框。 (把它放在可信赖的网站上没有用)
我正在使用:
$ie = New-Object -com "InternetExplorer.Application"
您认为最佳方法是什么?
答案 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来检查供应商提供的页面。