HtmlAgilityPack ArgumentOutOfRangeException

时间:2013-07-12 08:03:40

标签: c# windows-phone-8 windows-phone html-agility-pack

我正在尝试使用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()似乎给了我整个页面的源代码。

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

1 个答案:

答案 0 :(得分:1)

看起来你是在追踪一个特定的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;