【问题标题】:WebBrowser OpenDialog automation fails in .NETWebBrowser OpenDialog 自动化在 .NET 中失败
【发布时间】:2014-05-16 16:34:18
【问题描述】:

在网页加载到我的 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();
        }

它们都失败了,即使出现了打开的对话框,也没有在打开的对话框文本框中输入任何键,它只是坐在那里什么都不做。

另外,如果我在 opendialog 中单击 CANCEL 按钮,我会收到以下错误: ":\Users\john\Desktop\test1\blue-book-motorcycle.jpg 文件名无效" .因此,opendialog 文本框从我的键中删除了 "C"。有什么问题?我也以管理员身份运行它。失败!!!

【问题讨论】:

标签: c# .net httpwebrequest webbrowser-control webclient


【解决方案1】:

您在这方面失败了,因为您试图将文本从 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}");
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2020-08-30
    • 2018-04-11
    • 1970-01-01
    • 2023-02-17
    • 2010-10-15
    相关资源
    最近更新 更多