C # Visual Studio DotNetBrowser продолжает поиск GetelementbyID - PullRequest
0 голосов
/ 05 июля 2018

Я начинающий в коде, и я пытаюсь autofill имя пользователя и пароль на странице, но когда я нажимаю логин, код по-прежнему ищет getelementbyid на следующей странице (все страницы находятся в одном домене) и сбои. Я использую Visual Studio 2k17

Заранее спасибо, любая помощь будет идеальной!

using System;
using System.Windows.Forms;
using DotNetBrowser;
using DotNetBrowser.DOM;
using DotNetBrowser.Events;
using DotNetBrowser.WinForms;

namespace WindowsFormsApp9
{
    class Program
    {
        public class WindowMain : Form
        {
            private WinFormsBrowserView browserView;

            public WindowMain()
            {
                Browser browser = BrowserFactory.Create();
                browserView = new WinFormsBrowserView(browser);

                browser.FinishLoadingFrameEvent += delegate (object sender, FinishLoadingEventArgs e)
                {

                    if (e.IsMainFrame)
                    {
                        DOMDocument document = e.Browser.GetDocument();
                        DOMInputElement username = (DOMInputElement)document.GetElementById("id_Username");
                        DOMInputElement password = (DOMInputElement)document.GetElementById("id_Password");


                        username.Value = "fo2";
                        password.Value = "f2342156f";

                    }
                };

                this.Controls.Add(browserView);

                Width = 1024;
                Height = 768;
                this.Load += WindowMain_Loaded;
            }

            void WindowMain_Loaded(object sender, EventArgs e)
            {
                browserView.Browser.LoadURL("http://test.com");
            }

            [STAThread]
            public static void Main()
            {
                WindowMain wnd = new WindowMain();
                Application.Run(wnd);

                var browser = wnd.browserView.Browser;
                wnd.browserView.Dispose();
                browser.Dispose();
            }
        }
    }
}

1 Ответ

0 голосов
/ 06 июля 2018

Событие Browser.FinishLoadingFrameEvent возникает каждый раз, когда веб-страница полностью загружена. Итак, приложение аварийно завершено, поскольку оно по-прежнему устанавливает значения для элементов, которых нет на следующей веб-странице.

Чтобы решить эту проблему, необходимо добавить проверку с проверенным URL и отписаться от FinishLoadingFrameEvent после выполнения кода входа.

Вот переработанный образец:

using System;
using System.Windows.Forms;
using DotNetBrowser;
using DotNetBrowser.DOM;
using DotNetBrowser.Events;
using DotNetBrowser.WinForms;

namespace WindowsFormsApp9
{
    class Program
    {
        public class WindowMain : Form
        {
            private WinFormsBrowserView browserView;

            public WindowMain()
            {
                Browser browser = BrowserFactory.Create();
                browserView = new WinFormsBrowserView(browser);

                browser.FinishLoadingFrameEvent += Browser_FinishLoadingFrameEvent;

                this.Controls.Add(browserView);

                Width = 1024;
                Height = 768;
                this.Load += WindowMain_Loaded;
            }

            private void Browser_FinishLoadingFrameEvent(object sender, FinishLoadingEventArgs e)
            {
                if(e.IsMainFrame && e.ValidatedURL.Contains("loginURL"))
                {
                    DOMDocument document = e.Browser.GetDocument();
                    DOMInputElement username = (DOMInputElement)document.GetElementById("id_Username");
                    DOMInputElement password = (DOMInputElement)document.GetElementById("id_Password");

                    username.Value = "fo2";
                    password.Value = "f2342156f";

                    e.Browser.FinishLoadingFrameEvent -= Browser_FinishLoadingFrameEvent;
                }
            }

            void WindowMain_Loaded(object sender, EventArgs e)
            {
                browserView.Browser.LoadURL("http://test.com");
            }

            [STAThread]
            public static void Main()
            {
                WindowMain wnd = new WindowMain();
                Application.Run(wnd);

                var browser = wnd.browserView.Browser;
                wnd.browserView.Dispose();
                browser.Dispose();
            }
        }
    }
}
...