Użyj skryptu GetElementsByClassName

Próbuję napisać skrypt PowerShell, aby pobrać tekst ze wszystkich klas o nazwie „newstitle” ze strony internetowej.

Oto co mam:

function check-krpano {
    $geturl=Invoke-WebRequest http://krpano.com/news/
    $news=$geturl.parsedhtml.body.GetElementsByClassName("newstitle")[0]
    Write-Host  "$news"
}

check-krpano

To oczywiście wymaga znacznie więcej ulepszeń, ale jak dotąd nie działa.

Udało mi się napisać skrypt za pomocą GetElementById, ale nie znam składni GetElementsByClassName i szczerze mówiąc, nie udało mi się znaleźć wielu informacji na ten temat.

UWAGA:

Zaznaczyłem właściwą odpowiedź na moje pytanie, ale to nie jest rozwiązanie, które wybrałem w moim skrypcie.

Chociaż udało mi się znaleźć zawartość w tagu zawierającym określoną klasę, używając 2 metod, były one znacznie wolniejsze niż wyszukiwanie linków.

Oto wyjście za pomocą polecenia Measure-Command:

Wyszukaj div zawierające klasę „newstitle” za pomocą parsedhtml.body -> 29,6 sekundyWyszukaj devów zawierających klasę „newstitle” przy użyciu Allelements -> 10,4 sekundyWyszukaj linki, których element „href” zawiera #news -> 2,4 sekundy

Tak więc oznaczyłem jako użyteczną odpowiedź metody Links.

To jest mój ostatni skrypt:

function check-krpano {
    Clear-Host
    $geturl=Invoke-WebRequest http://krpano.com/news
    $news = ($geturl.Links |Where href -match '\#news\d+' | where class -NotMatch 'moreinfo+' )
    $news.outertext | Select-Object -First 5
}

check-krpano

questionAnswers(4)

yourAnswerToTheQuestion