检查网站是否通过 PowerShell (5.1) 加载

时间:2021-06-08 12:44:12

标签: powershell

这是我的第一篇 Stack Overflow 帖子!

我正在尝试通过 Powershell 检查网站是否已完全加载。 我发现函数 Invoke-RequestSelect-String 是我需要检查网站上的单词(仅在网站完全加载后才会出现)的功能。 然后如果找到这个词,我想给一个值“true”,例如返回以跳出循环。 可以在此 Example solution

的答案 1 中看到一个示例

但是,如果我使用此解决方案,我将获得整个 HTML 代码作为输出。我不想要的 有谁知道如何避免获取整个 HTML 脚本?以及如何将单词返回为“真”值? 作为一个例子,我想从这个 Website 返回 句子“未找到产品”。检查它是否已满载。

这是我目前拥有的代码示例。 Try + Catch 示例将是一个 if else 语句,它可以在找到句子“No production found”后让我跳出循环。

你们知道如何解决这个问题吗?

try {
$Response = Invoke-WebRequest -URI https://pwa-woo.wpmobilepack.com/#/;
write-Host $Response.InputFields | Where-Object 
{
$_.name -like "* No products found.*"
}

#break out of the loop
write-Host "Case True and break the loop"
}catch {
write-Host "Case False dident work"
}

(解决方案不应该创建文件)

1 个答案:

答案 0 :(得分:0)

您可以执行此操作的另一种方法是使用 Edge Dev Tools 查看在站点上执行的请求的顺序。

当我打开开发工具并转到该地址的网络选项卡,然后搜索“未找到产品”时,我看到 main.js 向 URL 发出 XHR 请求,然后交替显示该消息:

[![使用 Edge DevTools 网络选项卡搜索字符串“未找到产品”][1]][1]

如果这给出了响应,它将呈现一个项目网格,如果没有,则显示 No products found

这是它检查的 URL:https://pwathemes.com/demo-api/wp-json/pwacommercepro/products/?page=1&featured=1&order=asc&orderby=title&per_page=20

所以一个更简单的循环变成了这个,直接检查产品的 URL。如果有,则No products found 不会显示

$url = `https://pwathemes.com/demo-api/wp-json/pwacommercepro/products/?page=1&featured=1&order=asc&orderby=title&per_page=20`
try {
   $result = Invoke-RestMethod $url -ErrorAction Stop
}
catch{
   write-warning "Could not load products!"
}

if ($null -ne $result){
    "results..."
    $result
}

为什么要使用这种方法?

加载页面并搜索字符串也称为网页抓取。

当今大多数现代页面都是异步加载的,这意味着它们对基本页面做出非常快速的响应,因此浏览器可以开始显示结果,然后用有用的信息填充占位符。为此,他们加载脚本。

我们可以监控页面的加载以查看脚本在做什么,并直接转到底层 API 以减少一些脆弱性。

这两种方法都需要权衡。应用发布者(如果不是我们)可以在没有承诺或通知的情况下随时更改底层 API,因此它可能会破坏我们的脚本。

与此同时,他们也可以随时更改在页面上呈现内容的方式。

确实是苹果和橘子,但是访问 API 通常比页面抓取更容易,而且 API 的变化比前端代码少。 [1]:https://i.stack.imgur.com/R54JW.png

相关问题