J'essaie d'écrire un script PowerShell pour obtenir le texte dans toutes les classes nommées "newstitle" à partir d'un site Web.Utiliser GetElementsByClassName dans un script
C'est ce que j'ai:
function check-krpano {
$geturl=Invoke-WebRequest http://krpano.com/news/
$news=$geturl.parsedhtml.body.GetElementsByClassName("newstitle")[0]
Write-Host "$news"
}
check-krpano
Il faut évidemment beaucoup plus de peaufinage, mais jusqu'à présent, il ne fonctionne pas.
J'ai réussi à écrire un script en utilisant GetElementById, mais je ne connais pas la syntaxe de GetElementsByClassName, et pour être honnête, je n'ai pas pu trouver beaucoup d'informations à ce sujet.
REMARQUE:
J'ai fait tic tac la bonne réponse à ma question, mais ce n'est pas la solution que je l'avais choisi d'utiliser dans mon script. Bien que j'ai été en mesure de trouver le contenu dans une balise contenant une certaine classe, en utilisant 2 méthodes, ils étaient beaucoup plus lent que la recherche de liens.
est ici la sortie en utilisant Mesure-Commande:
- Rechercher divs contenant classe 'newstitle' en utilisant parsedhtml.body -> 29,6 secondes
- Rechercher devs contenant classe 'newstitle' en utilisant allElements -> 10.4 secondes
- recherche pour les liens que son élément « href » contient #news -> 2.4 secondes
J'ai marqué comme utile la méthode liens réponse.
Ceci est mon script final:
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
On dirait un bug dans 'getElementsByTagName()' pour moi. Cependant, je suis juste tombé sur [cette réponse] (http://stackoverflow.com/a/9059206/1630171), ce qui suggère quelque chose comme ceci: '$ geturl.AllElements | ? {$ _. Classe -eq 'newstitle'} | sélectionnez innerText'. Peut-être un peu plus élégant. –
Les bonnes nouvelles sont que cela fonctionne avec PowerShell v5. Je suis tombé sur ce fil après que mon code ait fonctionné sous PowerShell v4. – Robin
Y at-il un moyen de stocker un des éléments que vous recevez en retour @AnsgarWiechers? Comme dans, si je reçois 5 éléments dans ma liste de sélection comme vous l'avez mentionné, et que je veux "capturer" dans un tableau comment pourrais-je faire cela? – KangarooRIOT