Извлечь http ссылку из элемента html - PullRequest
0 голосов
/ 10 марта 2020

Symante c недавно изменили свою страницу загрузки, которая перешла на Broadcom. С тех пор Invoke-WebRequest не может получить URL-адрес http для файла v5i64.exe.

Однако URL-адрес http можно найти при использовании Инструментов разработчика в браузере, который просматривает уровень Elements внутри раздела body страницы. .

Кто-нибудь знает, как можно извлечь этот ежедневно изменяемый URL-адрес с помощью PowerShell?

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

Ответы [ 2 ]

0 голосов
/ 10 марта 2020

Следующий скрипт PowerShell предложит вам загрузить ссылки, содержащие текст v5i64.exe и HTTPS. Это работает на PowerShell 5.1 для Windows. Он не работает для PowerShell 6 или 7 (PowerShell Core).

Протестировано на Windows 10.0.18363.657, Inte rnet 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()
0 голосов
/ 10 марта 2020

Используйте IE через ComObject

$ie = new-object -ComObject "InternetExplorer.Application"
$ie.visible=$True
while($ie.Busy) { Start-Sleep -Milliseconds 100 }
$IE.navigate2("https://www.broadcom.com/support/security-center/definitions/download/detail?gid=sep")
while ($IE.busy) {
     start-sleep -milliseconds 1000 #wait 1 second interval to load page 
      } 

Затем найдите элементю по $ie.Document.IHTMLDocument3_getElementsByTagName("element name")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...