2012-02-19 7 views
2

C#에서 Internet Explorer 프로세스를 열고 HTML 콘텐츠를이 브라우저로 보내고 '표시된'콘텐츠를 캡처 할 수 있습니까?C# Internet Explorer 및 HTML 태그 제거

다른 html 스트립 핑 메소드 (예 : HtmlAgilityPack)를 알고 있지만 위의 애비뉴를 살펴보고 싶습니다.

덕분에, LG

+0

완벽하게 유효한 질문 IMO. –

+1

'WebBrowser' 컨트롤을 사용할 수 있습니다. 'webBrowser.DocumentText = ....' –

답변

3

당신은 응용 프로그램에서 IE 호스트, 윈폼 및 WPF 모두 존재하는 WebBrowser 컨트롤을 사용할 수 있습니다. 그런 다음 컨트롤의 Source를 HTML로 설정하고 내용이로드 될 때까지 기다릴 수 있습니다 (HTML 다운로드가 완료 될 때 발생하는 Loaded 이벤트가 아니라 LayoutUpdated 이벤트 사용, 정렬되지 않은 모든 동적 JS 실행) Document 속성을 사용하여 HTML을 가져옵니다. 내가 그 신용을 수는 없지만, 위의 코드는 웹 페이지에서 전달에 웹 클라이언트 개체를 열고 해당 페이지에 대한 childLinks 모두 찾을 정규 표현식을 사용할 수 있도록

+0

안녕하세요. 올바른 방향으로 나를 가르쳐 주셔서 감사합니다. Document 속성에서 보이는 내용을 어떻게 가져올 수 있습니까? thanks –

+0

Document 속성은 WPF에서'object'로 정의되어 있지만 실제로 COM IHTMLDocument 객체를 감싸는 래퍼입니다. 디버거에서 단계적으로 살펴보면 HTMLBodyClass 객체를 포함하는 body와 같은 유용한 속성을 볼 수 있습니다. HTMLBodyClass 객체에는 자바 스크립트 뒤에 표시된 HTML 또는 innerText가 포함 된 'innerHTML' 속성이 있습니다. 태그가없는 텍스트 만 들어 있습니다. –

0
public List<LinkItem> getListOfLinksFromPage(string webpage) 
    { 
     WebClient w = new WebClient(); 
     List<LinkItem> list = new List<LinkItem>(); 
     try 
     { 
      string s = w.DownloadString(webpage); 

      foreach (LinkItem i in LinkFinder.Find(s)) 
      { 
       //Debug.WriteLine(i); 
       //richTextBox1.AppendText(i.ToString() + "\n"); 
       list.Add(i); 
      } 
      listTest = list; 
      return list; 
     } 
     catch (Exception e) 
     { 
      return list; 
     } 

    } 

    public struct LinkItem 
    { 
     public string Href; 
     public string Text; 

     public override string ToString() 
     { 
      return Href; 
     } 
    } 

    static class LinkFinder 
    { 
     public static List<LinkItem> Find(string file) 
     { 
      List<LinkItem> list = new List<LinkItem>(); 

      // 1. 
      // Find all matches in file. 
      MatchCollection m1 = Regex.Matches(file, @"(<a.*?>.*?</a>)", RegexOptions.Singleline); 

      // 2. 
      // Loop over each match. 
      foreach (Match m in m1) 
      { 
       string value = m.Groups[1].Value; 
       LinkItem i = new LinkItem(); 

       // 3. 
       // Get href attribute. 
       Match m2 = Regex.Match(value, @"href=\""(.*?)\""", 
       RegexOptions.Singleline); 
       if (m2.Success) 
       { 
        i.Href = m2.Groups[1].Value; 
       } 

       // 4. 
       // Remove inner tags from text. 
       string t = Regex.Replace(value, @"\s*<.*?>\s*", "", 
       RegexOptions.Singleline); 
       i.Text = t; 

       list.Add(i); 
      } 

      return list; 

     } 
    } 

다른 사람이 정규 표현식을 만들었습니다. 이것이 당신이 찾고있는 것인지 확신 할 수 없지만 모든 HTML 컨텐트를 "잡아서"파일에 저장하기 만하면 "s"줄을 "string s = w"에 저장하면됩니다 .DownloadString (웹 페이지); " 파일에.