我试图从http://www.pgatour.com/leaderboard.html页面上的得分表中获取玩家名称,但使用PowerShell使用getElementsByTagName搜索它不会返回任何内容:
$HTML = Invoke-WebRequest -Uri http://www.pgatour.com/leaderboard.html
$HTML.ParsedHtml.getElementsByTagName("a") | where { $_.className -like '*expansion*' }
使用 .name.expansion 在CSS浏览器的网页浏览器中查找类名称选择器返回我需要的播放器名称,但据我所知,无法使用搜索方式进行搜索PowerShell中的CSS选择器。
我也尝试使用 $ HTML.AllElements ,但没有运气。
请告知解决此任务的最佳方法是什么。谢谢!
答案 0 :(得分:1)
问题是你没有在PowerShell中获得相同的页面,就像在浏览器中一样。要检查它,请尝试代码:
$HTML = Invoke-WebRequest -Uri "http://www.pgatour.com/leaderboard.html"
$HTML.Content > leaderboard.html
然后在浏览器中打开leaderboard.html。如您所见,有消息
您的浏览器似乎已过时。为了最好的网站 经验,我们建议您更新浏览器。
缺少排行榜。您可以尝试的是通过IE获取内容
$ie = New-Object -com InternetExplorer.Application
#$ie.visible=$true
$ie.navigate("http://www.pgatour.com/leaderboard.html")
while($ie.ReadyState -ne 4) {start-sleep -m 100} #waiting for page is ready
start-sleep -s 30 #waiting for leaderboard to load
$ahrefs = $ie.Document.getElementsByTagName("a")
$names = ($ahrefs | where {$_.className -eq "name expansion"})
$names | foreach {write-host $_.textContent}
注意,上面的解决方案非常慢