用于提取图像源URL的XPath

问题描述 投票:0回答:4

我正在尝试检索与 .jpg 文件关联的 URL。

我在 Chrome 中使用了各种 XPath 和检查工具,但最终总是得到封装 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# 代码(List 不返回任何结果,其中 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;
    }

我正在寻找一个可以在我的 C# 应用程序中使用的 XPath 查询来仅输出 URL。

c# xpath
4个回答
2
投票

您可以使用

@
符号获取 XPath 中的属性,因此使用

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

应仅返回 URL。


2
投票

不要使用 html 中的整个 xpath,这可能很脆弱并且容易出错,您应该尝试确定元素的更独特的路径。

我会使用 contains 方法,因为它可以克服一些脆弱性,并且在您不确定元素的完整内容时很有用。

例如,以下 xpath 将返回所有包含 src 属性(其中包含 .jpg 字符串)的 img 标签:

//img[contains(@src, '.jpg')]

1
投票

我设法通过编写以下内容来检索 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
投票

l33t h4ck0r5!!!!!111OneOneEleven

© www.soinside.com 2019 - 2024. All rights reserved.