我想每天自动从我们的信用卡提供商的网站下载一份报告。
文件是动态生成的,所以我不知道文件本身的实际 URL。
我可以使用 powershell 导航和登录网页,然后单击“下载报告”按钮。但是随后出现“文件下载”对话框,我不知道如何按该对话框上的“保存”按钮。
看来我的选择是:
以某种方式找到该窗口,并尝试发送击键
不知何故在对话框出现时找到文件的URL,然后直接下载。
找到一种方法来禁用 ie 中的“文件下载”框。 (把它放在受信任的网站上是行不通的)
我正在使用:
$ie = New-Object -com "InternetExplorer.Application"
您认为最好的方法是什么?
最佳答案
为此,最好的选择是要求提供商(如果可能)发布一些 API。
为此,发送击键非常脆弱。 点击保存后会发生什么?将打开一个对话框,您应该导航到一个文件夹,然后单击确定。这意味着您需要重新找到窗口。如果打开了一些类似的窗口怎么办?您的脚本能否找到正确的窗口? (对于其他需要隐藏/显示/查找窗口和发送击键的场景,我建议使用 Autohotkey。)
其他可能性取决于它是什么网站。该文件似乎是作为对 POST 命令的响应而生成的。这意味着没有可以下载的直接链接。即使有链接,也可能无法通过 Net.WebClient
下载,因为您不会发送任何身份验证信息(查询字符串中的 session cookie 或 session ID)。您需要解析例如来自 $ie.Document.cookie
的 cookie 并将它们添加到请求中。
但是,在某些情况下,您可以使用 [System.Net.WebRequest]$webRequest = [System.Net.WebRequest]::Create($url);
并指定 POST 方法和数据并等待响应(这将是文件)。这将模仿点击提交按钮。但同样,如果没有凭据,它可能会失败。
没有访问该站点,很难说更多。
关于powershell - 使用 powershell 自动从网站下载文件(不知道文件的 url),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2230242/