2011-04-11 6 views
0

Je ne suis pas vraiment un programmeur (plus d'un scripteur) et j'ai écrit un script très rapide en utilisant AutoIt! pour recueillir des informations sur le site Web de HP sur une liste d'ordinateurs que nous avons. J'ai pensé que j'essaierais de le porter sur C# pour le rendre un peu plus "professionnel".Obtenir des informations à partir de la page Web

Le code lit dans un fichier contenant un code de produit, numéro de série. Il place ensuite cette information dans un DataGridView. Il y a trois colonnes, la troisième étant la date de début (ce que je cherche).

Voici ce que j'ai jusqu'à présent. De là, je suis perdu quant à ce qu'il faut faire ensuite. La page Web va à la page suivante, mais je ne comprends pas comment obtenir les informations dont j'ai besoin (la première date de début - qui est le moment où la garantie a commencé). En AutoIt! c'était le cadre 19 et ensuite j'ai analysé cela. Je ne sais tout simplement pas comment le faire en C#.

Tous les pointeurs seraient grandement appréciés.

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"; 

    }` 

Répondre

0

Je ne peux vraiment pas vous aider (à cause de je ne l'ai fait ce que vous faites maintenant) mais je pense que watin bibliothèque d'automatisation peut vous aider considérablement

0

Je pense que je compris. Après l'événement click sur le bouton submit, j'ai dû mettre une pause pour attendre le chargement de la nouvelle page. Même si j'ai vu la nouvelle page Web, le programme était déjà passé aux commandes suivantes. En regardant les variables dans le débogage, je pouvais voir que c'était l'ancienne page. Voici le code que j'ai utilisé. Après avoir compris le chargement de la page Web, je savais déjà que c'était l'image 19 à regarder. À partir de là, il s'agissait simplement de convertir la chaîne en un tableau de lignes, puis de faire une boucle pour chercher la première date de début et extraire cette information.

 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++; 
     } 

    } 
Questions connexes