从网页中提取字符串

时间:2018-11-11 20:21:49

标签: c# visual-studio webdatagrid

我需要在其文本来自网页的地方贴上标签,但为了使其无法正常工作,在我看来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;

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

谢谢。

1 个答案:

答案 0 :(得分:0)

它为null,因为在您尝试访问它时尚未加载。您应该异步处理它。

处理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;
    }

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