无法使用PowerShell获取元素文本

时间:2016-04-21 20:50:20

标签: html css powershell

我试图从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 ,但没有运气。

请告知解决此任务的最佳方法是什么。谢谢!

1 个答案:

答案 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}

注意,上面的解决方案非常慢