我試圖編寫一個PowerShell腳本來從網站中獲取名爲「newstitle」的所有類中的文本。在腳本中使用GetElementsByClassName
這是我有:
function check-krpano {
$geturl=Invoke-WebRequest http://krpano.com/news/
$news=$geturl.parsedhtml.body.GetElementsByClassName("newstitle")[0]
Write-Host "$news"
}
check-krpano
這顯然需要更多的調整,但到目前爲止,這是行不通的。
我設法使用GetElementById編寫腳本,但我不知道GetElementsByClassName的語法,說實話,我一直沒能找到關於它的許多信息。
注:
我已經選中正確回答我的問題,但是這並不是說我已經選擇了我的腳本使用該解決方案。
雖然我能夠找到包含某一類,採用2種方法標籤中的內容,他們很慢,當搜索的鏈接。
這裏是用測量命令的輸出:
- 搜索使用parsedhtml.body包含類「newstitle」的div - >29.6秒
- 搜索包含類「newstitle」使用Allelements開發者 - > 10.4秒
- 搜索鏈接這些元素的「href」屬性包含#news - >2.4秒
所以我已經標記爲有用的鏈接方法的答案。
這是我最後的腳本:
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
看起來像'getElementsByTagName()'中的一個錯誤。然而,我剛剛遇到[這個答案](http://stackoverflow.com/a/9059206/1630171),這表明這樣的事情:'$ geturl.AllElements | ? {$ _。Class -eq'newstitle'} |選擇innerText'。可能會更優雅一點。 –
好消息是它適用於PowerShell v5。我的代碼在PowerShell v4下運行後遇到此線程。 – Robin
有沒有方法可以存儲您收到的@AnsgarWiechers元素之一?就像在我的選擇列表中,如你所提到的那樣,如果我返回5個元素,並且我想將它「捕獲」到一個數組中,我該怎麼做? – KangarooRIOT