Вам необходимо получить доступ к дочернему элементу <img>
внешнего элемента <a>
и вызвать его .getAttribute()
метод , чтобы получить интересующее значение атрибута:
$ProductInfo.ParsedHTML.body.getElementsByClassName("aaImg").
childnodes[0].getAttribute('data-imagezoom')
Это должно вернуть строку https://imagehost.ssl.server123.com/Product-1600x1600/image.jpg
.
Что касается ваш собственный ответ :
Использование регулярное выражение (или поиск по подстроке) для анализа структурированных данных, таких как HTML и XML, имеет значение хрупкое и его лучше избегать.
Например, если исходный HTML изменяется на использование '...'
вместо "..."
вокруг значений атрибутов ваше решение ломается (этот конкретный случай не составляет труда объяснить в регулярном выражении, но есть много других способов, которыми такой синтаксический анализ может пойти не так).
Кроссплатформенная перспектива :
К сожалению, свойство .ParsedHTML
с его HTML DOM доступно только в Windows PowerShell (и его реализация COM является громоздкой и медленной для работы в PowerShell).
PowerShell Core , даже в Windows, нене поддерживается, и нет встроенного парсера HTML, доступного (начиная с PowerShell Core 6.2.0).
HtmlAgilityPack NuGet является популярным открытымисходный HTML-анализатор, но он нацелен на C # и поэтому нетривиален для установки и использования в PowerShell.
Тем не менее, этот ответ от TheIncorrigible1 имеет рабочий примеркоторый загружает требуемую сборку по требованию.
[1] Обратите внимание, что .getAttribute()
необходим для доступа к настраиваемым атрибутам, тогда как стандартным атрибутамтакие как id
и, в случае <a>
элементов, href
, представлены непосредственно как свойства объекта (например, .id
;обратите внимание, что .getAttribute()
работает и со стандартными атрибутами.)