You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PowerShell从网站搜索页面获取目标产品的URL地址

失效原因

你使用的Invoke-WebRequest仅能获取服务端返回的初始静态HTML,而目标搜索页的产品列表是前端JavaScript异步加载渲染的,初始HTML里没有生成后的产品链接,所以自然提取不到结果。


解决方案

方案1:提取页面内嵌的产品JSON数据(无额外依赖,速度最快)

大部分电商站点会把初始搜索结果预存在页面的<script>标签里,直接用正则匹配提取JSON解析即可:

# 定义搜索参数
$targetEan = "3283950923699"
$searchUrl = "https://www.shop-naturpur.de/index.php?lang=0&cl=search&searchparam=$targetEan"

# 请求搜索页
$resp = Invoke-WebRequest -Uri $searchUrl -UseBasicParsing

# 匹配页面内嵌的搜索结果JSON
$jsonMatch = [regex]::Match($resp.Content, 'window\.oxArticleList\s*=\s*(\[.*?\]);', [System.Text.RegularExpressions.RegexOptions]::Singleline)

if ($jsonMatch.Success) {
    # 解析JSON
    $productList = $jsonMatch.Groups[1].Value | ConvertFrom-Json
    # 匹配对应EAN的产品,拼接完整链接
    $targetProduct = $productList | Where-Object { $_.ean -eq $targetEan } | Select-Object -First 1
    $productUrl = "https://www.shop-naturpur.de/$($targetProduct.link)"
    Write-Output $productUrl
}

如果上面的正则匹配不到,你可以手动打开搜索页,按F12在控制台输入window,查看存储搜索结果的变量名,替换正则里的变量名即可。

方案2:使用无头浏览器渲染完整页面(通用动态页面解决方案)

如果站点完全没有预存数据,就用支持JS渲染的无头浏览器加载完整页面后再提取:

# 首次运行先安装依赖模块
Install-Module PuppeteerSharp -Scope CurrentUser -Force
Import-Module PuppeteerSharp

# 启动无头Chrome
$launchOpt = New-Object PuppeteerSharp.LaunchOptions -Property @{ Headless = $true }
$browser = [PuppeteerSharp.Puppeteer]::LaunchAsync($launchOpt).Result
$page = $browser.NewPageAsync().Result

# 导航到搜索页,等待产品列表渲染完成
$page.GoToAsync("https://www.shop-naturpur.de/index.php?lang=0&cl=search&searchparam=3283950923699#/q/3283950923699").Wait()
# 这里的选择器需要根据实际页面结构调整,F12选中产品链接元素即可复制选择器
$page.WaitForSelectorAsync(".product-list .product-item a.product-link").Wait()

# 提取所有产品链接
$links = $page.EvaluateExpressionAsync("Array.from(document.querySelectorAll('.product-list .product-item a.product-link')).map(el => el.href)").Result
# 筛选目标链接
$targetUrl = $links | Where-Object { $_ -like "*Cattier-Duschgel-Wilde-Verbena-Zitrus*" } | Select-Object -First 1

Write-Output $targetUrl

# 释放资源
$browser.CloseAsync().Wait()

内容的提问来源于stack exchange,提问作者Narav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 18:15:03