私は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つのメソッドを使用して特定のクラスを含むタグ内のコンテンツを見つけることができましたが、リンクを検索するのがずっと遅かったです。ここで
は、Measure-Commandコマンドを使用して出力されます。parsedhtml.bodyを使用して、クラスのnewstitle」を含むdiv要素のための- 検索 - > 29.6秒 Allelementsを使用して、クラスのnewstitle」を含む開発者のための
- 検索 - > 10.4秒のリンクの
- 検索その要素「hrefが」#news含まれている - > 2.4秒
は、だから私は便利なリンク方法の答えとしてマークされています。
これが私の最後のスクリプトです:あなたは仕事にのgetElementsByClassNameを取得する方法を見つけ出す場合
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 | ? {$ _。クラス-eq 'newstitle'} | select innerText'を実行します。もう少しエレガントかもしれない。 –
良いニュースはPowerShell v5で動作することです。 PowerShell v4でコードが壊れた後、このスレッドに遭遇しました。 – Robin
@AnsgarWiechersを受け取った要素の1つを保存する方法はありますか?あなたが言及したように私の選択リストに5つの要素を戻したら、それを配列に「取り込み」たいのですが、どうすればいいでしょうか? – KangarooRIOT