我正在开发一个嵌入了 webbroswercontrol 的 Windows 应用程序。我正在尝试将示例消息发布到一个开放的 Facebook 群组。我无法使用 C# 更改文本框的值。每当我自动单击时,它都会说文本框值为空。解决办法是什么?
<input type="hidden" autocomplete="off" class="mentionsHidden"
name="xhpc_message" value="lklklkl">
HtmlElement textBox = this.FindControlByName("xhpc_message",
this.webBrowser.Document.All);
//Click Code
var elements = webBrowser.Document.GetElementsByTagName("button");
foreach (HtmlElement element in elements)
{
// If there's more than one button, you can check the
//element.InnerHTML to see if it's the one you want
if (element.InnerText.Contains("Post"))
{
if (textBox.InnerText.Trim() == "Write something...")
{
textBox.Focus();
textBox.GetAttribute("value").Equals("Test Message");
IHTMLElement nativeElement = element.DomElement as IHTMLElement;
nativeElement.click();
break;
}
}
}
最佳答案
1) 我建议您确保文本框为空,而不是 textBox.InnerText。通常元素的内部文本为空,因此最好检查“占位符”属性并更新代码:
// if (textBox.InnerText.Trim() == "Write something...")
if (textBox.GetAttribute("placeholder") == "Write something...")
2) 此代码未设置值。它获取值并与“测试消息”进行比较。
textBox.GetAttribute("value").Equals("Test Message");
只需使用 SetValue 即可。
textBox.SetAttribute("value", "Test message");
3) 确保所有操作都在页面加载后进行。
public SomeFormName()
{
...
webBrowser.DocumentCompleted += webBrowser_DocumentCompleted;
}
void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs args)
{
// put your code here
}
4) 不确定 FindControlByName 是如何工作的,所以检查一个简单的 LINQ 查询以确保找到文本框。
var textbox = webBrowser.Document.All.OfType<HtmlElement>()
.Where(item => item.Name == "xhpc_message")
.FirstOrDefault()
;
关于c# - 使用 C# 代码发布到 Facebook 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24053971/