如何通过类名调用 Web 浏览器中的元素

本文关键字:元素 浏览器 Web 何通过 名调用 | 更新日期: 2023-09-27 17:56:22

我正在尝试制作一个简单的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;
        }

(这是我编辑的快速解决方案,不是很干净)。这是怎么回事?

如何通过类名调用 Web 浏览器中的元素

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

这是简单的替代品供您尝试:

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