如何通过类名调用 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="{"tn":"+{"}" 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;
}
(这是我编辑的快速解决方案,不是很干净)。这是怎么回事?
看起来您的 GetButtonByInnerText() 方法没有正确搜索按钮元素。
这是简单的替代品供您尝试:
HtmlElement GetButtonByInnerText(string SearchString)
{
foreach (HtmlElement el in webBrowser1.Document.All)
if (el.InnerText==SearchString)
return el;
}