Получение информации с веб-страницы - PullRequest
0 голосов
/ 11 апреля 2011

Я на самом деле не программист (скорее сценарист) и написал очень быстрый сценарий, используя AutoIt! собирать информацию с веб-сайта HP по списку компьютеров, которые у нас есть. Я подумал, что попробую перенести его на C #, чтобы сделать его немного более «профессиональным».

Код считывает в файле код продукта, серийный номер. Затем он помещает эту информацию в представление данных. Есть три столбца, третий - дата начала (что я ищу).

Ниже то, что я имею до сих пор. Отсюда я заблудился относительно того, что делать дальше. Веб-страница действительно переходит на следующую страницу, но я не понимаю, как получить нужную мне информацию (первая дата начала, когда начинается гарантия). В AutoIt! это был кадр 19, а потом я разобрал это. Я просто не знаю, как это сделать в C #.

Любые указатели будут с благодарностью.

    private void runner(int i)
    {
        int j = i;
        bool loadFinished = false;

        webBrowser1.DocumentCompleted += delegate { loadFinished = true; };
        webBrowser1.Navigate("http://www11.itrc.hp.com/service/ewarranty/warrantyInput.do");

        while (!loadFinished )
        {
            Thread.Sleep(100);
            Application.DoEvents();
        }

        webBrowser1.Document.GetElementById("productnumber").InnerText = dt.Rows[j][0].ToString();
        webBrowser1.Document.GetElementById("serialnumber1").InnerText = dt.Rows[j][1].ToString();

        HtmlElementCollection elems = webBrowser1.Document.GetElementsByTagName("SELECT");
        foreach (HtmlElement elem in elems)
        {
            if (elem.Name.ToString() == "country")
            {
                elem.SetAttribute("value", "US");
            }
        }

        int countelement = 0;
        HtmlElementCollection col = webBrowser1.Document.GetElementsByTagName("INPUT");
        foreach (HtmlElement element in col)
        {
            if (element.Name.ToString() == "")
            {
                if (countelement == 1)
                {
                    element.InvokeMember("click");
                }
                countelement++;
            }
        }
        dt.Rows[j][2] = "done";

    }`

Ответы [ 2 ]

0 голосов
/ 13 апреля 2011

Думаю, я понял это.После события нажатия на кнопку отправки мне нужно было поставить паузу в ожидании загрузки новой страницы.Несмотря на то, что я увидел новую веб-страницу, программа уже перешла к следующим командам.Глядя на переменные в отладке, я увидел, что это старая страница.Ниже приведен код, который я использовал.

После того, как я разобрался с загрузкой веб-страницы, я уже знал, что это кадр 19, на который нужно смотреть.Оттуда был только вопрос преобразования строки в массив строк, а затем циклический поиск первой даты начала и получение этой информации.

        private void runner(int i)
    {
        int j = i;
        bool loadFinished = false;

        webBrowser1.DocumentCompleted += delegate { loadFinished = true; };
        webBrowser1.Navigate("http://www11.itrc.hp.com/service/ewarranty/warrantyInput.do");

        while (!loadFinished )
        {
            Thread.Sleep(100);
            Application.DoEvents();
        }

        webBrowser1.Document.GetElementById("productnumber").InnerText = dt.Rows[j][0].ToString();
        webBrowser1.Document.GetElementById("serialnumber1").InnerText = dt.Rows[j][1].ToString();

        HtmlElementCollection elems = webBrowser1.Document.GetElementsByTagName("SELECT");
        foreach (HtmlElement elem in elems)
        {
            if (elem.Name.ToString() == "country")
            {
                elem.SetAttribute("value", "US");
            }
        }

        int countelement = 0;
        HtmlElementCollection col = webBrowser1.Document.GetElementsByTagName("INPUT");
        foreach (HtmlElement element in col)
        {
            if (element.Name.ToString() == "")
            {
                if (countelement == 1)
                {
                    element.InvokeMember("click");
                    do
                    {
                        Application.DoEvents();
                    } while (webBrowser1.IsBusy);
                }
                countelement++;
            }
        }

        string output = "";
        int county = 0;
        HtmlElementCollection elly = webBrowser1.Document.GetElementsByTagName("TABLE");
        foreach (HtmlElement el in elly)
        {
            if (county == 19)
            {
                string[] lines = el.InnerText.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                foreach (string line in lines)
                {
                    if (line.IndexOf("Start Date") != -1)
                    {
                        output = line.ToString();
                        dt.Rows[j][2] = output.Remove(0, 10);
                        break;
                    }

                }

            }
            county++;
        }

    }
0 голосов
/ 11 апреля 2011

Я действительно не могу вам помочь (потому что я никогда не делал то, что вы делаете сейчас), но я думаю, watin библиотека автоматизации может помочь вам значительно

...