Próbuję napisać skrypt PowerShell, aby uzyskać tekst ze wszystkich klas o nazwie "newstitle" ze strony internetowej.Użyj GetElementsByClassName w skrypcie
To jest to, 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 dużo bardziej skomplikowany, ale do tej pory, to nie działa.
Udało mi się napisać skrypt za pomocą GetElementById, ale nie znam składni dla GetElementsByClassName, i szczerze mówiąc, nie byłem w stanie znaleźć wiele informacji na ten temat.
UWAGA:
mam zaznaczyć właściwą odpowiedź na moje pytanie, ale nie jest to rozwiązanie, które ja wybraliśmy do wykorzystania w moim skrypcie.
Mimo że udało mi się znaleźć zawartość w tagu zawierającym pewną klasę, używając dwóch metod, były one znacznie wolniejsze niż wyszukiwanie linków.
Oto wynik używając Measure-Command:
- Szukaj div class 'newstitle zawierających' używając parsedhtml.body -> 29,6 sekund
- Szukaj deweloperów zawierające klasę 'newstitle' używając Allelements -> 10.4 sekundy
- wyszukiwania dla łączących jego elementem „href” zawiera #news -> 2,4 sekundy
Więc zostały oznaczone jako użyteczna metoda Linki odpowiedź.
To jest mój ostateczny scenariusz:
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
Wygląda jak błąd w 'getElementsByTagName()' dla mnie. Jednak właśnie natknąłem się na [tę odpowiedź] (http://stackoverflow.com/a/9059206/1630171), która sugeruje coś takiego: '$ geturl.AllElements | ? {$ _. Klasa -eq "newstitle"} | wybierz innerText'. Może być trochę bardziej elegancko. –
Dobra wiadomość jest taka, że działa z PowerShell v5. Natknąłem się na ten wątek po tym, jak mój kod złamał się w PowerShell v4. – Robin
Czy istnieje sposób na zapisanie jednego z elementów otrzymanych z powrotem @AnsgarWiechers? Tak jak w przypadku, gdy otrzymam 5 elementów z powrotem na mojej liście wyboru, tak jak wspomniałeś, i chcę "schwytać" ją w tablicy, jak mogłem to zrobić? – KangarooRIOT