С# htmlagilitypack: Получить img не имея класса элемента

934
25 января 2018, 16:42

Использую htmlagilitypack. Есть html код

<div class="ui-image-viewer-thumb-wrap" data-role="thumbWrap">
            <a class="ui-image-viewer-thumb-frame" data-role="thumbFrame" href="javascript:void(0);" data-spm-anchor-id="a2g0v.12010108.1000017.1">
                <img alt="Лидер продаж" title="Лидер продаж" src="https://ae01.alicdn.com/kf/HTB13IwpQFXXXXXgaXXXq6xXFXXXu/250-300-2-Pad.jpg_640x640.jpg" data-role="thumb"
                style="max-width: 500px; max-height: 500px;" data-spm-anchor-id="a2g0v.12010108.1000017.i0.5703a98yCgFir">
            </a>
        </div>

Как из него можно получить ссылку на картинку (src)?

PS:

id("magnifier")/div[@class="ui-image-viewer-thumb-wrap"]/a[@class="ui-image-viewer-thumb-frame"]/img[1]/@src

не катит(.

Answer 1

Я думаю тут будет правильней что то вроде такого:

var imgNode = doc.DocumentNode.SelectSingleNode("/div[@class='ui-image-viewer-thumb-wrap']/a/img");
var url = imgNode.GetAttributeValue("src", null);
  • Первая строка - у указанного div-а мы берем первый подходящий a и в нем уже забираем первый img. В итоге у нас в imgNode будет элемент картинки.
  • Вторая строка - у нашей картинки берем атрибут src. Результатом будет string значение нашей ссылки.

Если у вас html в точности как вы указали, то данный вариант будет вполне неплохо работать.

Answer 2

С использованием XPathNavigator ваше выражение успешно отрабатывает:

var htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(@"
<div class='ui-image-viewer-thumb-wrap' data-role='thumbWrap'>
   <a class='ui-image-viewer-thumb-frame' data-role='thumbFrame' href='javascript:void(0);' data-spm-anchor-id='a2g0v.12010108.1000017.1'>
      <img alt='Лидер продаж' title='Лидер продаж' src='https://ae01.alicdn.com/kf/HTB13IwpQFXXXXXgaXXXq6xXFXXXu/250-300-2-Pad.jpg_640x640.jpg' data-role='thumb'
           style='max-width: 500px; max-height: 500px;' data-spm-anchor-id='a2g0v.12010108.1000017.i0.5703a98yCgFir'>
   </a>
</div>");
var path = "/div[@class='ui-image-viewer-thumb-wrap']/a[@class='ui-image-viewer-thumb-frame']/img[1]/@src";
var xpathNavigator = htmlDocument.CreateNavigator();
var srcValue = xpathNavigator.SelectSingleNode(path).Value;
READ ALSO
System.UnauthorizedAccess и Process.Start()

System.UnauthorizedAccess и Process.Start()

Есть две программы, одна принимает аргументы, другая запускает программу с аргументами таким кодом:

177
работа с изображениями C#

работа с изображениями C#

каким наиболее простым способом можно программно наложить текст на изображение? в какую сторону копать, и какими библиотеками это проще...

266
Параметры в MySQL запросе не заменяются C#

Параметры в MySQL запросе не заменяются C#

В запрос не подставляются параметры, делаю так:

231
Получить все переменные из класса

Получить все переменные из класса

С помощью определенной функции получаю все ссылки на классы в нужном Gameobject

241