使用<a href=""> child

时间:2017-04-30 02:03:23

标签: c# html web webrequest

I am working with a webBrowser in C# and I need to get the text from the link. The link is just a href without a class.

its like this

<div class="class1" title="myfirstClass">
<a href="link.php">text I want read in C#
<span class="order-level"></span>

Shouldn't it be something like this?

        HtmlElementCollection theElementCollection = default(HtmlElementCollection);
        theElementCollection = webBrowser1.Document.GetElementsByTagName("div");
        foreach (HtmlElement curElement in theElementCollection)
        {
            if (curElement.GetAttribute("className").ToString() == "class1")
            {
                HtmlElementCollection childDivs = curElement.Children.GetElementsByName("a");
                foreach (HtmlElement childElement in childDivs)
                {
                    MessageBox.Show(childElement.InnerText);
                }

            }
        }

2 个答案:

答案 0 :(得分:1)

在这里,我创建了控制台应用程序以提取锚文本。

static void Main(string[] args)
        {
            string input = "<div class=\"class1\" title=\"myfirstClass\"><a href=\"link.php\">text I want read in C#<span class=\"order-level\"></span>";
            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(input);
            foreach (HtmlNode item in doc.DocumentNode.Descendants("div"))
            {
                var link = item.Descendants("a").First();
                var text = link.InnerText.Trim();
                Console.Write(text);
            }
            Console.ReadKey();
        }

请注意,这是htmlagilitypack问题,因此请正确标记问题。

答案 1 :(得分:1)

这是按标签名称获取元素的方式:

String elem = webBrowser1.Document.GetElementsByTagName("div");

这样你应该提取href的值:

var hrefLink = XElement.Parse(elem)
     .Descendants("a")
     .Select(x => x.Attribute("href").Value)
     .FirstOrDefault();

如果你有超过1个“a”标签,你也可以放入一个foreach循环,如果这是你想要的。

编辑:

使用XElement:

您可以通过调用element.ToString()来获取包含外部节点的内容。

如果要排除外部标记,可以调用String.Concat(element.Nodes())

使用HtmlAgilityPack获取innerHTML:

  1. NuGet安装HtmlAgilityPack。
  2. 使用此代码。
  3. HtmlWeb web = new HtmlWeb();

    HtmlDocument dc = web.Load("Your_Url");

    var s = dc.DocumentNode.SelectSingleNode("//a[@name="a"]").InnerHtml;

    我希望它有所帮助!