XPath для извлечения URL источника изображения - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь получить URL, связанный с файлом .jpg.

Я использовал различные инструменты XPath и проверки в Chrome, но всегда получаю результат, в котором URL инкапсулируется.Пример:

Абсолютная ссылка XPath:

/html/body/div[3]/div/div[2]/div[1]/ul[1]/li/img 

возвращает:

<img src="test.com/Uploads/Picture/20150816/121atp-5-navigation/ATP5-9.jpg" xpath="1"> 

... в Chrome, но не приводит к C # (с использованием HTMLAgilityPack)

HTML:

<ul id="title-img" class="title-img" unselectable="on" style="-moz-user-select: none;"> 
 <li style="" xpath="1">
  <img src="test.com/Uploads/Picture/20150816/121atp-5-navigation/ATP5-9.jpg">
 </li>
</ul>  

Код C # (список не возвращает результатов, где xpathQuery является вышеуказанной ссылкой на XPath):

 private List<string> returnNodes(string xpathQuery, GeckoWebBrowser geckoWebBrowser)
    {
        List<string> nodes = new List<string>();
        try
        {
            XPathResult xpathResult = geckoWebBrowser.Document.EvaluateXPath(xpathQuery);
            var foundNodes = xpathResult.GetNodes();
            foreach (var node in foundNodes)
            {
                var x = node.TextContent; // get text text contained by this node (including children)
                GeckoHtmlElement element = node as GeckoHtmlElement; //cast to access.. inner/outerHtml
                string inner = element.InnerHtml;
                string outer = element.OuterHtml;

                //iterate through child nodes
                foreach (var child in node.ChildNodes)
                {
                    nodes.Add(removeCarriageReturnsFromString(child.NodeValue));
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(xpathQuery + " => " + ex.Message);
        }
        return nodes;
    }

Я ищу запрос XPathЯ могу использовать в своем приложении C # для вывода только URL.

Ответы [ 3 ]

0 голосов
/ 31 января 2019

Вместо использования целого xpath из html, который может быть хрупким и подвержен ошибкам, вы должны попытаться определить более уникальный путь к вашему элементу.

Я бы использовал метод contains, поскольку он может преодолеть некоторые изэта хрупкость и полезна, когда вы не уверены в полном содержании элемента.

Например, следующий xpath вернет все теги img , которые содержат атрибут src , включающий строку .jpg:

//img[contains(@src, '.jpg')]
0 голосов
/ 31 января 2019

Мне удалось получить URL, написав следующее.Передайте вашу ссылку ABSOLUTE XPath в.

private List<string> returnPictureNodes(string xpathQuery, GeckoWebBrowser geckoWebBrowser)
    {
        List<string> arrNodes = new List<string>();
        try
        {

            GeckoImageElement img = (GeckoImageElement)geckoWebBrowser.Document.SelectSingle(xpathQuery);
            arrNodes.Add(removeCarriageReturnsFromString(img.Src));                
        }
        catch (Exception ex)
        {
            MessageBox.Show(xpathQuery + " => " + ex.Message);
        }
        return arrNodes;
    }
0 голосов
/ 31 января 2019

Вы можете получить атрибуты в XPath с символом @, поэтому использование

/html/body/div[3]/div/div[2]/div[1]/ul[1]/li/img/@src

должно возвращать только URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...