C # Невозможно войти через WebBrowser - PullRequest
0 голосов
/ 30 мая 2018

Я новичок в C #.Мне нужна помощь, чтобы войти на веб-страницу и прочитать некоторые данные.

После поиска в Google я попытался найти приведенный ниже код и другие ресурсы, но во всех случаях я могу получить только html-источник страницы входа, ноне исходные данные других страниц.

  1. Сначала мне нужно перейти на домашнюю страницу.
  2. Затем мне нужно перейти к «Статус порта» и прочитать некоторые полезные данные.Для информирования данные хранятся в кадрах.Как я могу прочитать данные из фреймов?

Добавление дополнительной информации

1) view-source: http://192.168.0.239/homepage.html,, который вызывает скрипт, как показано ниже

getSubTree ('Управление');

2) Вышеуказанный вызов обращается к содержимому файла сценария java (http://192.168.0.239/frame.js)

    case "Management":
       str += OneNodeLink("lv1", "Switch Information", "/iss/specific/sysInfo.html?Gambit="+GAMBIT);
       str += OneNodeLink("lv1", "Port Status", "/iss/specific/port_settings.html?Gambit="+GAMBIT);

document.getElementById ("treeFrame"). InnerHTML = str;

3) Приведенный выше код выполняет этот файл «view-source: http://192.168.0.239/iss/specific/port_settings.html?Gambit=pisfgagehesfhjikojngqcabdfkjeeffmpkhfckm"» и получает «Состояние порта»

Мое требование - прочитать «Статус порта», полученный из данных фреймов. НадеюсьЯ могу сделать это ясно. Дайте мне знать, если вам нужна дополнительная информация, чтобы помочь.

Ссылка имеет скриншоты и HTML-исходные файлы: https://www.dropbox.com/sh/oml3tk75tf1lu5c/AADuGtbZci3gnyOQ2AE8IYwua?dl=0

Большое спасибо заранее

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace WebBrowserWithoutAForm
{
    class Program
    {
        private static bool completed = false;
        private static WebBrowser wb;
        [STAThread]
        static void Main(string[] args)
        {
            wb = new WebBrowser();
            wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted);

            string postData = string.Format("LoginPassword={0}&login=Login", "password");
            ASCIIEncoding enc = new ASCIIEncoding();
            wb.Navigate("http://192.168.0.239", "", enc.GetBytes(postData), "Content-Type: application/x-www-form-urlencoded\r\n");            

            //wb.Navigate("http://192.168.0.239");

            while (!completed)
            {
                Application.DoEvents();
                Thread.Sleep(100);
            }
            Console.Write("\n\nDone with it!\n\n");
            Console.ReadLine();
        }

        static void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            //Console.WriteLine(wb.Document.Body.InnerHtml);
            completed = true;

            Thread.Sleep(1000);

           //*******HERE I NEED TO TRAVERSE TO THE HOME PAGE AND GET ITS SOURCE ******
            wb.Navigate("http://192.168.0.239/homepage.html");

            Console.WriteLine(wb.DocumentText);
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Для страницы входа в систему я бы сделал GetElementById на входе для входа в систему, а затем установил атрибут value.Затем для кнопки входа в систему, если это на самом деле кнопка, я бы вызвал событие click (), в противном случае, если это форма, я бы сделал отправку.

Для статуса порта вам снова потребуетсязнать HTML-код домашней страницы и выполнить для него GetElementById, а затем вызвать событие click ().

Чтобы добавить код к этим словам, это будет выглядеть примерно так:

        var portStatus = this.webBrowser1.Document.GetElementById("portStatus");
        portStatus.InvokeMember("click");

        //this should give you access to DOM of the first frame on the page.
        //if you have more than 1 then you will need to know which one.
        var frameDoc= this.webBrowser1.Document.Window.Frames[0].Document;           
        //or
        var frameDoc= this.webBrowser1.Document.Window.Frames["iframeid"].Document;;

        var login = this.webBrowser1.Document.GetElementById("Login");
        login.SetAttribute("Value", "password");

        var loginButton = this.webBrowser1.Document.GetElementById("LoginButton");
        loginButton.InvokeMember("click");

        //or if the login button is a form then submit the form
        HtmlElement form = webBrowser1.Document.GetElementById("FormID");
        if (form != null)
            form.InvokeMember("submit");

Поскольку вы не указали HTML-код домашней страницы, используемый здесь идентификатор должен быть заменен фактическим идентификатором страницы.И вы бы заменили «пароль» тем, что ваш действительный пароль здесь.

Я надеюсь, что это поможет, если вам понадобится какое-то объяснение, дайте мне знать.

Также см. это для работы с фреймами

0 голосов
/ 30 мая 2018

Я предлагаю вам использовать selenium - мой пример кода использования Selenium для входа на Facebook

Я не собираюсь кодировать для вас, но вы можете скопировать некоторую часть моего кода, хотя.

...