首页 > 解决方案 > 从 html 元素中提取 http 链接

问题描述

赛门铁克最近更改了他们的下载页面,该页面移至 Broadcom。从那时起Invoke-WebRequest无法获取v5i64.exe文件的 http url。

但是,在浏览器中使用开发人员工具查看页面正文部分内的元素级别时,可以找到 http url。

有没有人知道如何使用 PowerShell 提取这个每日更改的 url?

$webreq = Invoke-WebRequest "https://www.broadcom.com/support/security-center/definitions/download/detail?gid=sep"
$webreq.Links | Select href

标签: powershellweb-scraping

解决方案


以下 PowerShell 脚本将提示您下载包含文本v5i64.exeHTTPS. 这适用于 Windows 的 PowerShell 5.1。它不适用于 PowerShell 6 或 7(PowerShell 核心)。

在 Windows 10.0.18363.657、Internet Explorer 11.657.18362、PowerShell 5.1.18362.628 上测试

$url = "https://www.broadcom.com/support/security-center/definitions/download/detail?gid=sep"

$outfile = "./v5i64.exe"

$ie = New-Object -ComObject "InternetExplorer.Application"

$ie.visible=$True

while($ie.Busy) {
    Start-Sleep -Milliseconds 100
}

$ie.navigate2($url)

while($ie.ReadyState -ne 4 -or $ie.Busy) {
    Start-Sleep -milliseconds 500
} 

$ie.Document.getElementsByTagName("a") | % {
    if ($_.ie8_href -like "*v5i64.exe") {
        if ($_.ie8_href -like "https://*") {
            $len = (Invoke-WebRequest $_.ie8_href -Method Head).Headers.'Content-Length'
            Write-Host "File:" $_.ie8_href
            Write-Host "Size:" $len
            $confirm = Read-Host "Download file? [y/n]"
            if ($confirm -eq "y") {
                Write-Host "Downloading" $_.ie8_href

                Invoke-WebRequest -Uri $_.ie8_href -OutFile $outfile
            }
        }
    }
}

$ie.Stop()
$ie.Quit()

推荐阅读