HtmlAgilityPack参数超出范围异常

本文关键字:范围 异常 参数 HtmlAgilityPack | 更新日期: 2023-09-27 18:22:01

我正在尝试使用HtmlAgilityPack在Windows Phone上解析网站内容。我当前的代码是:

HtmlWeb.LoadAsync(url, DownloadCompleted);
...
void DownloadCompleted(object sender, HtmlDocumentLoadCompleted e)
    {
        if (e.Error == null)
        {
            HtmlDocument doc = e.Document;
            if (doc != null)
            {
                string test = doc.DocumentNode.Element("html").Element("body").Element("form").Elements("div").ElementAt(2).Element("table").Element("tbody").Elements("tr").ElementAt(4).Element("td").Element("center").Element("div").InnerText.ToString();
                System.Diagnostics.Debug.WriteLine(test);
            }
        }
    }

目前,当我运行上述程序时,我在string test = doc.DocumentNode.Element("html").Element("body").Element("form").Elements("div").ElementAt(2).Element("table").Element("tbody").Elements("tr").ElementAt(4).Element("td").Element("center").Element("div").InnerText.ToString();处得到一个ArgumentOutOfRangeException。

doc.DocumentNode.Element("html").InnerText.ToString()似乎给了我整个页面的源代码。

我试图解析的网站的URL是:http://polyclinic.singhealth.com.sg/Webcams/QimgPage.aspx?Loc_Code=BDP

HtmlAgilityPack参数超出范围异常

如果我没有弄错的话,看起来你在寻找一个特定的DIV,它有一个唯一的标识符<td class="queueNo"><center><div id="divRegPtwVal">0</div></center></td>

为什么不简单地使用doc.DocumentNode.SelectSingleNode("//div[@id='divRegPtwVal']")doc.DocumentNode.Descendants("div").Where(div => div.Id == "divRegPtwVal").FirstOrDefault()


为id为的特定图像选择图像源

 var attrib = doc.DocumentNode.SelectSingleNode("//img[@id='imgCam2']/@src");
 //I suspect, might be a slightly different property, I can't check right now
 string src = attrib.InnerText;

或者:

var img = doc.DocumentNode.Descendants("img").Where(img => img.Id=="imgCam2");
string src = img.Attributes["Source"].Value;