从浏览器中通过 ID 获取元素并显示在标签中

Get element by ID from webbrowser and show in label

所以我有一个问题.. 我想在我的 Windows 申请表的标签上显示网页中的文本。这是 "Inspect Element" 代码:

<ul id="userInfoNav">
<li>Rank: <span class="value">Sivilist</span></li>
<li>Bosted: <span class="value">Oslo</span></li>
<li>Gjeng: <span class="value">Ingen</span></li>
<li>Penger: <span id="money_hand" class="value">16,000 kr</span></li>
<li>Kuler: <span class="value">0 stk</span></li>

我试过使用:

web.Document.GetElementById("userInfoNav").InvokeMember("Value", label1.Text);

但它什么也没做..

文本也会不时更改..

这个问题表达得不太好,但从评论中看,有几件事可能是你想要的:

  1. <ul id="userInfoNav">中完整的内部html(请注意,由于ul是一个未闭合的标签,因此内容可能与您期望的不同):

    label1.Text = webBrowser1.Document.GetElementById("userInfoNav").innerHtml;
    
  2. 每个<li>上的html:

    var elem = webBrowser1.Document.GetElementById("userInfoNav");
    foreach (var child in elem.Children.OfType<HtmlElement>())
    {
      label1.Text += child.InnerHtml;  // child.InnerHtml contains the html of    each li
      // You can use child.InnerText which would remove the html tags (<span>)
    }
    
  3. 你说的就是你在评论中想要的(即"Rank" "Bosted" "Gjeng" "Penger and "Kuler”)。代码特定于这种情况并不普遍:

    var elem = webBrowser1.Document.GetElementById("userInfoNav");
    foreach (var child in elem.Children.OfType<HtmlElement>())
    {
      label1.Text += child.InnerText.Split(':')[0]);  
    }
    

我想这三个都不是你想要的,但如果你不指定更多,我就可以做到这一点。至少,它应该让您了解如何访问数据

获取外部文本:

statsTextBox.Text = web.Document.GetElementById("userInfoNav").OuterText;

并在执行代码之前检查 ID 是否存在:

HtmlElement htmlelement = web.Document.GetElementById("userInfoNav");
            if (htmlelement == null)
            {
                return;
            }
            else
            {
                statsTextBox.Text = web.Document.GetElementById("userInfoNav").OuterText;
            }