首页 > 解决方案 > 如何从结果对象 Invoke-WebRequest 命令中“单击”元素

问题描述

我正在尝试从 vmware 硬件兼容性列表中自动收集数据,重点围绕 VSAN 产品。他们有一个可搜索的页面,一旦你提出请求,你就会得到一个结果列表。他们还有一个按钮,允许将结果“导出到 csv”。我正在尝试使用的 URL 是这个:

https://www.vmware.com/resources/compatibility/search.php?deviceCategory=hdd&vsan_type=vsanhdd&page=1&display_interval=500&details=1

我正在尝试使用 Powershell 代码“单击”该“导出到 CSV”按钮。

我可以找到我试图单击的元素,并且我看到它有一个名为 ."click()" 的方法,但它在调用时没有任何作用。

$url = "https://www.vmware.com/resources/compatibility/search.php?deviceCategory=hdd&vsan_type=vsanhdd&page=1&display_interval=500&details=1"

$webrequest = Invoke-WebRequest -Uri $url

$a = $webrequest.ParsedHtml.getElementById("export_csv")
$a.Cick()

我注意到使用 Chromes 开发工具后,一旦单击 export_csv 按钮,就会向另一个 URL 发出发布请求,该 URL 实际上会生成文件。发布请求包含进入 CSV 的实际数据,我相信它已经在页面的某处生成,但我似乎无法从 $webrequest 变量中提取该表单。

此外,我还看到函数主体附加了一个导出表单,我很确定这是 POST 数据的来源(似乎有一个 javascript 函数在执行此操作)。但是,在手动检查页面时,我似乎无法以编程方式访问我可以在 Chrome 开发人员工具中看到的“表单”元素。

如果我可以提取 POST 数据,或者只是调用导出到 CSV 函数并获取它输出的文件,我会很高兴。

关于如何完成其​​中任何一个的任何想法?谢谢

标签: powershellinvoke-webrequest

解决方案


虽然我没有设法找到执行此操作的方法,但这只是达到目的的一种手段,能够提取数据最终我发现 vmware 有一些 .js 页面用于实际编译该列表。在这些 .js 页面中有整个 vmware VCG 数据集,例如 IO 设备、服务器、vSAN 就绪节点等。

因此,如果其他人觉得这很有用,下面是各种数据集的链接。这里的数据似乎被组织成 javascript 变量,可以按原样使用或解析为 Powershell 对象,就像我的情况一样。

https://www.vmware.com/resources/compatibility/js/data_cpu.js
https://www.vmware.com/resources/compatibility/js/data_server.js
https://www.vmware.com/resources/compatibility/js/data_io.js

推荐阅读