1. у них есть API по ключу, откуда можно взять JSON или XML.
2. DOM динамический, такого span в сыром ответе нету.
3. Есть вариант вытащить JSON и взять оттуда.
Код:
if ((Invoke-WebRequest 'https://www.youtube.com/watch?v=HZTStHzWRxM'
).Content -match 'ytplayer\.config = ({.+?});') {
(($matches[1] | ConvertFrom-Json).args.player_response |
ConvertFrom-Json).videoDetails.shortDescription
}
p.s. так тоже работает, но это вроде бы неофициальный API
Код:
$youtube_video_id = 'HZTStHzWRxM'
$query_string = Invoke-WebRequest "https://www.youtube.com/get_video_info?video_id=${youtube_video_id}"
Add-Type -AssemblyName 'System.Web'
([System.Web.HttpUtility]::ParseQueryString($query_string).Get('player_response') | ConvertFrom-Json).videoDetails.shortDescription