【问题标题】:HtmlAgilityPack Windows Phone 8.1 Find node in htmlDocumentHtmlAgilityPack Windows Phone 8.1 在 htmlDocument 中查找节点
【发布时间】:2015-11-09 22:07:41
【问题描述】:

我正在构建一个需要从网页访问元素的 Windows 8.1 Phone 应用程序。我需要访问的元素在页面内部相当深,所以我需要找到一种简单的方法来访问这些元素而不使用 XPATH(因为据我了解,Windows Phone 8.1 不支持 XPATH)。

就从网页加载文档而言,以下方法是我用来获取页面(正常工作)的方法。为了给您一个我需要访问的 HTML 元素示例,请考虑以下示例:

<html>
<head>..</head>
<body>
    <form>
        <div class="1"></div>
        <div class="2">
            <p>The text I wish to access</p>
        </div>
        <div class="3"></div>
    </form>
    <p>...</p>
</body>
</html>

以及我需要访问文本的方法

private async Task GetHtmlDocument(string url)
{
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
    request.Credentials = new LoginCredentials().Credentials;

    try
    {
        WebResponse myResponse = await request.GetResponseAsync();
        HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
        htmlDoc.OptionFixNestedTags = true;
        htmlDoc.Load(myResponse.GetResponseStream());


        var body = htmlDoc.DocumentNode.Descendants("body").First();
        var form = body.Descendants("form").First();

    }
    catch (...){ ... }
}

编辑:忘了提到Descendants("form") 没有返回任何有用的东西(即使body.InnerHTML 包含一个表单元素)。

下面的代码打印出所有的 HTML 代码,这些代码可以通过在浏览器中检查 Body 元素中的“body”找到,但对于“form”,InnerHtml 是空的 ("") 并且该元素没有子元素。

HtmlNode body = htmlDoc.DocumentNode
            .Descendants("body")
            .FirstOrDefault();
HtmlNode form = htmlDoc.DocumentNode
            .Descendants("body")
            .FirstOrDefault()
            .Descendants("form")
            .FirstOrDefault();

Debug.WriteLine(body.InnerHtml);
Debug.WriteLine(form.InnerHtml);

【问题讨论】:

    标签: windows-phone-8.1 web-scraping html-agility-pack


    【解决方案1】:

    我认为this 会帮助你。显然您需要从标记的元素列表中删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多