用于提取图像源URL的XPath

时间:2019-01-30 22:01:09

标签: c# xpath

我正在尝试检索与.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#代码(其中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 :(得分:1)

您可以在XPath中使用@符号来获取属性,因此使用

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

应仅返回URL。

答案 1 :(得分:1)

与其使用html的整个xpath可能会很脆弱并且容易出错,您应该尝试找出元素的更唯一路径。

我将使用contains方法,因为它可以克服这种脆弱性,并且在不确定元素的全部内容时很有用。

例如,以下xpath将返回所有 img 标签,这些标签包含 src 属性,该属性包括.jpg字符串:

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

答案 2 :(得分: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;
    }