我正在研究的原型需要在网站中提取深层嵌套的IFrame。我需要找到包含类的所有元素,但是在HtmlAgilityPack的PCL发行版中没有XPath,因此this answer不起作用。使用.Descendants()作为this answer的另一种方法似乎也不起作用,因为我尝试过,后代()似乎没有考虑孩子的孩子,或者是否,我不知道怎么做。
site's数据结构如下:
html
body
div class mh-container
div class mh-wrapper
div class mh-main
div id main-content
article class post
div class entry-content <- has multiple (2) divs with os_poll
div class os_poll
div class os_widget_container <- TARGET
iframe name os_frame <- need data of the 'src' attribute
我的目标是使用os_poll类获取所有元素,然后访问iframe并获取其src数据。由于XPath不起作用,我不知道如何导航节点以获得孩子的孩子(我刚接触HAP),我不知道如何处理这个问题。
答案 0 :(得分:0)
我找到了一种在PCL项目中按类查找元素的方法。但是你必须使用AngleSharp,而不是HtmlAgilityPack,因为XPath is not available in PCL。检查AngleSharp链接以获取更多信息。
在AngleSharp中按类选择所有元素:
string html;
using (var client = new HttpClient())
{
string = await client.GetStringAsync("http://your.content.com/some.html");
}
var parser = new HtmlParser();
var doc = parser.Parse(html);
var divs = doc.All.Where(e = > e.LocalName == "div" && e.ClassList.Contains("your-class"));
注意:不要使用我上面链接的网站上的数据,因为上面的网站需要添加os_poll元素的JavaScript,它将无法正常工作。这完全是另一个问题,超出了这个问题的范围。