2012-02-25 3 views
0

Google의 Apex 시스템을 사용하여 온라인 수업을 진행하고 있으며 특정 페이지의 데이터를 자동으로 저장할 수 있기를 원합니다. 정상적으로 탐색 할 때 로그인하고 콘텐츠를받는 과정은 다음과 같습니다. webapp를 열고 로그인하여 보려는 코스를 탐색하고 코스를 클릭합니다. 수업을 클릭하면 수업이 열리는 새 창이 열립니다. 이것은 내가 프로그램으로 할 수 없었던 부분입니다.웹 사이트에서 웹 페이지의 내부 텍스트를 프로그래밍 방식으로 저장합니다.

제가 생각한 첫 번째 방법은 PHP를 사용하여 웹 페이지를 요청하고 간단히 저장하는 것입니다. 문제는 PHP와 자동화하는 방법을 모르겠 로그인 및 여러 자바 스크립트 이벤트 및 것들이 있다는 것입니다. 나는 POST 요청으로 로그인하는 것으로 끝났지 만 나머지는 파악할 수 없었다.

오늘 저는 dotnet WebBrowser 컨트롤을 사용하여 Windows Forms, C#으로 작업하려고했습니다. 나는 그것을 위해 로그인하고 열 수있는 코스를 선택해야하는 페이지로 이동하지만 링크를 클릭하면 Internet Explorer에서 웹 페이지를 열려고 시도합니다. 링크가 열리면 사이트에서 오류가 발생합니다.

페이지에서 링크 검사 문제가 발생했습니다. 새 창을 여는 javascript 이벤트를 발견했습니다. 리디렉션 링크로 열립니다. 새 창 대신 새 탭에서이 리디렉션 링크를 사용하면 Chrome에서 작동하지만 C#에서 리디렉션 링크를 얻는 방법을 모르겠습니다. a 요소는 iframe 안에 있으며 링크를 가져와야합니다. How can I, in C#, retrieve an element from within an iframe?

또한 더 좋은 방법이 있습니까?

답변

1

URL의 html을 얻기 위해 WebClient 클래스를 사용하십시오.

예 1 :

string htmlTd; 

     using (WebClient client = new WebClient()) 
     { 
     //or - request.UserAgent = "Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US)"; 
     client.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13"; 
     htmlTd = client.DownloadString(myurl); 
     } 

     GetImagesInHTMLString(htmlTd); 

// 페이지에서 이미지 ...이 때문에 내가 그것을 일하고 내 수정 ... 에 지금에 결함이 얻을,하지만 당신은 당신의 목표를 얻을 수 있도록 ... 웹 클라이언트 클래스 링크에서

private void GetImagesInHTMLString(string htmlString) 
    { 

     List<string> images = new List<string>(); 
     string pattern = @"<(img)\b[^>]*>"; 

     Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase); 
     MatchCollection matches = rgx.Matches(htmlString); 
     string b [email protected]"src="""; 
     string [email protected]"src="""+myurl+""; 

     //if (matches.Count >1) 
     //{ 
      for (int i = 0, l =matches.Count; i < l; i++) 
      { 


       string pattern1 [email protected]"s/\s*src='[^']*'//"; 
       // images.Add(matches[i].Value.Replace(b, c)); 
       string allmatch = matches[i].Value.Replace(b, c); 
       string patrern1="#(= src=['\"].+[^\"]?)?src=[\"']?([^\"']+)#i"; 
       Regex rgx1 = new Regex(pattern1); 
       MatchCollection matches1 = rgx1.Matches(allmatch); 
       string siya = matches1[0].Value.ToString(); 
       //string b = @"src="""; 
       //string c = @"src=""" + myurl + ""; 
      } 
     // }  

     foreach (var item in images) 
     { 
      Response.Write(item); 
     }   
    } 

예 :

WebClient client = new WebClient(); 

     // Add a user agent header in case the 
     // requested URI contains a query. 

     client.Headers.Add ("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); 

     Stream data = client.OpenRead (URl); 
     StreamReader reader = new StreamReader (data); 
     string s = reader.ReadToEnd(); 
     Console.WriteLine (s); 
     data.Close(); 
     reader.Close(); 
+0

문제는 웹 페이지에서 HTML을받지, 그것은 얻을 수 있어요 서버의 PHP 세션 변수를 올바르게 설정하여 페이지를보고 다운로드 할 수있게합니다. 이 URL을 시도한 경우 로그인하지 않았다는 오류가 발생합니다. – mowwwalker

관련 문제