2011-04-11 291 views
0

我不是一個真正的程序員(更多的是scripter),並使用AutoIt編寫了一個非常快速的腳本!從惠普網站上收集我們所擁有的電腦列表中的信息。我想我會嘗試將它移植到C#以使其更「專業」一點。從網頁獲取信息

該代碼讀取包含產品代碼,序列號的文件。然後它將這些信息放到datagridview中。有三欄,第三欄是開始日期(我在找什麼)。

以下是我到目前爲止。從這裏我失去了下一步該做什麼。該網頁確實進入下一頁,但我不明白如何獲取我需要的信息(第一個開始日期 - 這是保修開始時的時間)。在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"; 

    }` 

回答

0

我真的幫不了你(因爲我從來沒有你現在在做什麼),但我認爲watin自動化庫可以幫助您顯著

0

我想我想通了。在提交按鈕上的點擊事件之後,我需要暫停以等待新頁面加載。即使我看到新的網頁,該程序已經轉到下一個命令。看看調試中的變量,我可以看到它是舊的頁面。以下是我使用的代碼。

當我想到關於網頁加載時,我已經知道它是第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++; 
     } 

    }