我正在尝试检索与 .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。
您可以使用
@
符号获取 XPath 中的属性,因此使用
/html/body/div[3]/div/div[2]/div[1]/ul[1]/li/img/@src
应仅返回 URL。
不要使用 html 中的整个 xpath,这可能很脆弱并且容易出错,您应该尝试确定元素的更独特的路径。
我会使用 contains 方法,因为它可以克服一些脆弱性,并且在您不确定元素的完整内容时很有用。
例如,以下 xpath 将返回所有包含 src 属性(其中包含 .jpg 字符串)的 img 标签:
//img[contains(@src, '.jpg')]
我设法通过编写以下内容来检索 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;
}
l33t h4ck0r5!!!!!111OneOneEleven