我正在尝试制作一个简单的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;
}
(这是我编辑的一个快速解决方案供我使用,不是很干净)。 这有什么不对?
答案 0 :(得分:0)
看起来你的GetButtonByInnerText()方法没有正确地搜索按钮元素。
以下是您尝试的简单替代方法:
HtmlElement GetButtonByInnerText(string SearchString)
{
foreach (HtmlElement el in webBrowser1.Document.All)
if (el.InnerText==SearchString)
return el;
}