如果您使用的是 PowerShell v3,则Invoke-WebRequest
cmdlet 可能会有所帮助。
要获取代表网站的对象:
Invoke-WebRequest "http://stackoverflow.com/search?tab=newest&q=powershell"
要获取该网站中的所有链接:
Invoke-WebRequest "http://stackoverflow.com/search?tab=newest&q=powershell" | select -ExpandProperty Links
并获取href
元素列表:
Invoke-WebRequest "http://stackoverflow.com/search?tab=newest&q=powershell" | select -ExpandProperty Links | select href
如果您使用的是 PowerShell v2 或更早版本,则必须创建一个InternetExplorer.Application
COM 对象并使用它来导航页面:
$ie = new-object -com "InternetExplorer.Application"
# sleep for a second while IE launches
Start-Sleep -Seconds 1
$ie.Navigate("http://stackoverflow.com/search?tab=newest&q=powershell")
# sleep for a second while IE opens the page
Start-Sleep -Seconds 1
$ie.Document.Links | select IHTMLAnchorElement_href
# quit IE
$ie.Application.Quit()
感谢这篇博文,我从中了解到Invoke-WebRequest
.
更新:也可以像您发布的那样下载网站源,然后从源中提取链接。像这样的东西:
$webclient.downloadstring($source) -split "<a\s+" | %{ [void]($_ -match "^href=[`'`"]([^`'`">\s]*)"); $matches[1] }
该-split
部分沿以 开头的行拆分源,<a
后跟一个或多个空格。输出被放置在一个数组中,然后我通过一个foreach-object
块进行管道传输。在这里,我匹配正则表达式中的每一行,它提取链接部分并输出它。
如果您想对输出做更多的事情,您可以将它进一步通过另一个对其进行处理的块。