Почему веб-страница входа не отображается в веб-браузере? - PullRequest
0 голосов
/ 14 января 2020

Я использую C# для входа на локальную веб-страницу. Я использую webBrowser для отображения страницы после журнала. Сначала я перехожу на страницу, затем заполняю имя пользователя и пароль, затем вызываю щелчок. Распознаваемый элемент распознается; поэтому я предполагаю, что щелчок произошел. Но страница результатов не отображается, при выполнении ничего не отображается. Я попробовал это:

        public WebBrowser webBrowser;

        public MainWindow()
        {
            InitializeComponent();

            webBrowser = new WebBrowser();

            webBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(LoginEvent);

            webBrowser.AllowNavigation = true;

            webBrowser.Navigate("http://192.168.1.100/login.html");
        }


         private void LoginEvent(object sender, WebBrowserDocumentCompletedEventArgs e)
        {

            WebBrowser webBrowser = sender as WebBrowser;

            //To execute the event just one time
            webBrowser.DocumentCompleted -= LoginEvent;


            //load page's document
            HtmlDocument doc = webBrowser.Document;

            doc.GetElementById("u").SetAttribute("value", "admin");

            doc.GetElementById("pw").SetAttribute("value", "123456");

            foreach (HtmlElement elem in doc.GetElementsByTagName("a"))
            {
                elem.InvokeMember("click");
            }
        }

Может кто-нибудь помочь мне, пожалуйста, понять, почему страница не отображается?

1 Ответ

0 голосов
/ 14 января 2020

1) Ваш WebBrowser объект является локальной переменной в конструкторе MainWindow().

Этот объект удаляется после завершения конструктора MainWindow.

Вам необходимо объявить WebBrowser объект как член класса.

2) Возможно, было запущено несколько событий DocumentComplete. Вам нужно отфильтровать все события iFrame и дождаться полной загрузки страницы:

private void LoginEvent(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    // filter out non main documents
    if (e.Url.AbsolutePath != (sender as WebBrowser).Url.AbsolutePath)
        return; 

    //To execute the event just one time
    webBrowser.DocumentCompleted -= LoginEvent;

    //load page's document
    HtmlDocument doc = webBrowser.Document;

    doc.GetElementById("u").SetAttribute("value", "admin");

    doc.GetElementById("pw").SetAttribute("value", "123456");

    foreach (HtmlElement elem in doc.GetElementsByTagName("a"))
    {
        elem.InvokeMember("click");
    }
}
...