从具有更改 URL 的网站下载文件的 Powershell 方法



我接到了一项任务,涉及每天从网站下载一个文件。我们称之为"https://test.example.com"。我有凭据,允许我登录到该站点,然后Flash界面显示可供下载的文件。下载文件后,将以多种方式对其进行处理。我已经将处理所有这些的Powershell放在一起,我只是很难自动下载文件的实际下载。

我在观看网络活动的同时使用 Flash 界面下载了几个文件,发现它实际上是从这个 URL 中提取文件:

https://test.example.com/link/EBDB7F67EF3B28XX99NCAD9920160423/file.zip

因此,我能够将其放在一起,以便通过我的PS脚本自动获取文件:

$url = 'https://test.example.com/link/EBDB7F67EF3B28XX99NCAD9920160423/file.zip'
$output = "C:Downloadsfile.zip"
Invoke-WebRequest -Uri $url -OutFile $output  

但是,URL 中的长串数字每天都在更改。我能找到的唯一可识别的模式是最后八位数字始终是发布该特定文件的日期。

有没有解决这个问题的好方法?我一直在尝试通配符和模式,以及检查 HTML 中我可以过滤的元素,但我很难找到正确的解决方案。

这很难自动化。您无法从脚本中驱动 Flash,除非它是专门为此设计的。正如我现在所看到的,你唯一的选择是:

  1. 如果可能的话,联系网站开发人员,也许他们可以为您提供有关生成链接的功能的详细信息。这给了我一个想法 - 也许你可以对Flash代码进行逆向工程,自己找到函数的细节。为此,请使用闪存反编译器。
  2. 模拟用户浏览闪存站点。这可以通过以下方式之一完成:
    • 自动热键 - 您可以记录相对于浏览器窗口的鼠标单击并再次执行脚本。除非闪存接口过于动态且无法预测,否则它将起作用。
    • Sikuli - 另一种依赖于图片片段识别的自动化语言。

上述所有 2.* 方法都会生成脆弱的自动化代码,因为它们依赖于浏览器设置(缩放、主题)甚至操作系统设置。出于这个原因,你需要在所有概率上专用一台机器(虚拟机ofc)。在Powershell中反编译闪存代码并重新实现url生成代码将使其成为可靠的100%。

正如有人在评论中所说,这不是一个Powershell问题,而是浏览器自动化问题。

最新更新