如何通过类名调用WebBrowser中的元素?

时间:2015-06-14 15:38:53

标签: c# html facebook webbrowser-control

我正在尝试制作一个简单的Facebook客户端。其中一个功能应该允许用户在主页/他的个人资料上发布内容。 它记录用户(工作正常,所有元素都在Facebook上有ID),然后在相应的字段中插入数据(也正常工作),但它需要单击“发布”按钮。但是,此按钮没有任何ID。它只有一堂课。

<li><button value="1" class="_42ft _4jy0 _11b _4jy3 _4jy1 selected _51sy" data-ft="&#123;&quot;tn&quot;:&quot;+&#123;&quot;&#125;" type="submit">Posten</button></li>

('Posten'在德语中是'Post'。)

我一直在互联网上看几个小时,尝试了不同的解决方案。我目前最新的解决方案是通过内部内容(“Posten”)搜索项目,然后调用它。不行。它插入文本但不调用按钮。这是代码:

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            if (postHomepage)
            {
                webBrowser1.Document.GetElementById("u_0_z").SetAttribute("value", metroTextBox1.Text);
                GetButtonByInnerText("Posten").InvokeMember("click");
                postHomepage = false;
            }
        }

HtmlElement GetButtonByInnerText(string SearchString)
        {

            String data = webBrowser1.DocumentText;
            //Is the string contained in the website
            int indexOfText = data.IndexOf(SearchString);
            if (indexOfText < 0)
            {
                return null;
            }
            data = data.Remove(indexOfText); //Remove all text after the found text
                                             //These strings are a list of website elements
                                             //NOTE: These need to be updated with ALL elements from list such as:
                                             //      http://www.w3.org/TR/REC-html40/index/elements.html
            string[] strings = { "<button" };
            //Split the string with these elements.
            //subtract 2 because -1 for index -1 for elements being 1 bigger than wanted
            int index = (data.Split(strings, StringSplitOptions.None).Length - 2);
            HtmlElement item = webBrowser1.Document.All[index];
            //If the element is a div (which contains the search string
            //we actually need the next item.
            if (item.OuterHtml.Trim().ToLower().StartsWith("<li"))
                item = webBrowser1.Document.All[index + 1];
            //txtDebug.Text = index.ToString();

            return item;

        }

(这是我编辑的一个快速解决方案供我使用,不是很干净)。 这有什么不对?

1 个答案:

答案 0 :(得分:0)

看起来你的GetButtonByInnerText()方法没有正确地搜索按钮元素。

以下是您尝试的简单替代方法:

HtmlElement GetButtonByInnerText(string SearchString)
{
 foreach (HtmlElement el in webBrowser1.Document.All) 
   if (el.InnerText==SearchString)
    return el;
}