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



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

我正在尝试通过Powershell检查网站是否已完全加载。我发现函数调用请求选择字符串是我需要在网站上检查单词的功能(只有在网站完全加载后才会出现(。然后如果单词被找到,我想给出一个值"真";例如返回以脱离循环。在回答1中可以看到这个示例解决方案的一个示例

然而,如果我使用这个解决方案,我会得到整个HTML代码作为输出。我不想要任何一个1知道如何避免获得整个HTML脚本吗?以及如何将单词返回为";真";价值作为一个例子,我想从这个网站返回句子";找不到产品"以检查它是否已满载。

这是我目前拥有的一个代码示例。Try+Catch的例子将是一个if-else语句,它可以在找到句子";没有找到生产";。

你们知道怎么解决这个问题吗?

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"
}

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

另一种方法是使用Edge开发工具查看在站点上执行的请求顺序。

当我打开开发工具,转到该地址的网络选项卡,然后搜索"未找到产品"时,我看到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

最新更新