在网页加载到我的WebBrowser控件后,我按下一个按钮。我如何知道它已加载?我等了很长时间才能确定。
以下是按钮代码的一个版本:
var elementsx = webBrowser1.Document.GetElementsByTagName("input");
foreach (HtmlElement file in elementsx)
{
if (file.GetAttribute("type") == "file")
{
listBox1.Items.Add(file.Style.ToString());
file.Focus();
file.InvokeMember("Click");
SendKeys.Send(@"C:\Users\John\Desktop\test1\blue-book-motorcycle.jpg" + "{ENTER}");
}
}
这是另一个:
mshtml.HTMLDocument doc = (mshtml.HTMLDocument)webBrowser1.Document.DomDocument;
// ################################################################################
//get the title textbox
IHTMLElementCollection inputer = (IHTMLElementCollection)doc.getElementsByTagName(@"input");
foreach (IHTMLElement element in inputer)
{
listBox1.Items.Add(element.style.cssText + " ||| " + element.getAttribute("type").ToString() + "%%%" + element.className);
//we also get other textboxes with similar class names that begin with
//gwt-TextBox so we test for it.
if(element.style.cssText=="height: 0px; visibility: hidden; position: absolute;" &&
element.getAttribute("type").ToString()=="file")
{
++i;
if(i==3)
{
element.click();
SendKeys.Send(@"C:\Users\John\Desktop\test1\blue-book-motorcycle.jpg" + "{ENTER}");
}
}
//webBrowser1.Update();
}
它们都失败了,即使出现打开的对话框,也没有任何键进入打开的对话框文本框,只是在那里无所事事。
另外,如果我单击CANCEL按钮进入opendialog,我会收到以下错误: ":\ Users \ john \ Desktop \ test1 \ blue-book-motorcycle.jpg文件名无效" 。因此,opendialog文本框从我的键中删除了" C" 。问题是什么?我也以管理员的身份运行它。失败!!!
答案 0 :(得分:0)
您失败了,因为您试图将文本放入WebBrowser表单的线程中的模式对话框中。这样做你不会成功。如果要填写该对话框上的文件名并按Enter键,则需要创建另一个线程,然后发送所需的密钥。
尝试这样的事情:
private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
var elementsx = webBrowser1.Document.GetElementsByTagName("input");
foreach (HtmlElement file in elementsx)
{
if (file.GetAttribute("type") == "file")
{
listBox1.Items.Add(file.Style.ToString());
file.Focus();
file.InvokeMember("Click");
Task.Delay(500).ContinueWith(t => SendFileName(@"C:\Users\John\Desktop\test1\blue-book-motorcycle.jpg"), TaskScheduler.FromCurrentSynchronizationContext());
}
}
}
private void SendFileName(string fileName)
{
SendKeys.Send(fileName + "{ENTER}");
}