0

我需要有一个标签,其文本来自网页,但是对于它不起作用,在我看来 webpae 返回 null,但位置是正确的。

    WebBrowser JOJO = new WebBrowser();
string Tesla = "";
                        JOJO.Url = new Uri("https://finance.yahoo.com/quote/TSLA?p=TSLA");
                        var sal = JOJO.Document.GetElementsByTagName("div");// this return null
                        foreach (HtmlElement link in sal)
                        {
    if (link.GetAttribute("className") == "D(ib) Mend(20px)")/*this is the class of the element*/        

          {
                            Tesla = link.FirstChild.InnerHtml;
                        }
                    }
                    label11.Text = Tesla;

这是我到目前为止所做的代码,有人可以看到为什么 dosnt 工作吗?

谢谢。

4

1 回答 1

0

它是空的,因为当您尝试访问它时它还没有加载。您应该异步处理它。

处理DocumentCompleted事件并访问Document处理程序中的 。

将您拥有的代码替换为:

WebBrowser JOJO = new WebBrowser();
JOJO.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler
                          (this.BrowserDocumentCompleted);
JOJO.Url = new Uri("https://finance.yahoo.com/quote/TSLA?p=TSLA");

这是处理程序:

void BrowserDocumentCompleted(object sender,
    WebBrowserDocumentCompletedEventArgs e)
    {
        if (e.Url.AbsolutePath != (sender as WebBrowser).Url.AbsolutePath)
            return;

        string Tesla = "";
        var sal = (sender as WebBrowser).Document.GetElementsByTagName("div");
        foreach (HtmlElement link in sal)
        {
            if (link.GetAttribute("className") == "D(ib) Mend(20px)")
            {
                Tesla = link.FirstChild.InnerHtml;
            }
        }
        label1.Text = Tesla;
    }

现在您可能会面临重定向的其他问题。但这是另一个讨论:)

于 2018-11-11T21:02:22.480 回答