2011-04-11 7 views
0

저는 프로그래머가 아니며 (더 많은 스크립트 작성자) AutoIt을 사용하여 매우 빠른 스크립트를 작성했습니다! HP의 웹 사이트에서 우리가 보유한 컴퓨터 목록에 정보를 수집합니다. 나는 좀 더 "전문가"로 만들기 위해 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

을 도울 수 있다고 생각 (나는 당신이 지금 무엇을하고 있는지 몰랐의 때문에) 내가 생각하는 나는 그것을 알아 낸 당신을 도울 수 있습니다. 제출 버튼에서 click 이벤트가 발생하면 새 페이지가로드 될 때까지 대기해야했습니다. 새 웹 페이지를 보았지만 프로그램은 이미 다음 명령으로 이동했습니다. 디버그에서 변수를 보면 이전 페이지임을 알 수 있습니다. 아래는 내가 사용한 코드입니다.

웹 페이지로드에 대해 알아 낸 후에는 이미 프레임 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++; 
     } 

    }