WinForms WebBrowser 내 중첩된 IFrame에서 비디오 링크 추출
WinForms WebBrowser
컨트롤을 사용한 웹 스크래핑 비디오 링크는 중첩된 iframe을 처리할 때 문제를 야기합니다. 표준 접근 방식은 iframe 구조로 인해 <video>
태그를 찾지 못하는 경우가 많습니다.
해결책: 재귀적 IFrame 탐색
핵심은 iframe 계층 구조를 재귀적으로 탐색하는 것입니다. 각 iframe에는 고유한 HtmlDocument
이 있으며, 각 중첩 수준에서 데이터를 탐색하고 추출하는 방법이 필요합니다.
DocumentCompleted
이벤트 활용
파싱하기 전에 페이지가 완전히 로드되었는지 확인하려면 DocumentCompleted
이벤트를 구독하세요. ReadyState
이 WebBrowserReadyState.Complete
인 경우 iframe을 한 번만 처리하세요.
구현 예(오류 처리 및 명확성 향상)
다음 코드는 향상된 오류 처리 및 명확한 변수 이름을 통합한 강력한 솔루션을 제공합니다.
<code class="language-csharp">public class MovieLink { public int Hash { get; set; } public string VideoLink { get; set; } public string ImageLink { get; set; } } private List<MovieLink> movieLinks = new List<MovieLink>(); private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { if (webBrowser1.ReadyState != WebBrowserReadyState.Complete) return; ExtractVideoLinks(webBrowser1.Document); } private void ExtractVideoLinks(HtmlDocument document) { try { foreach (HtmlElement videoElement in document.GetElementsByTagName("video")) { string videoLink = videoElement.GetAttribute("src"); if (string.IsNullOrEmpty(videoLink)) continue; //Skip if src is missing int hash = videoLink.GetHashCode(); if (movieLinks.Any(m => m.Hash == hash)) continue; //Skip duplicates string posterImage = videoElement.GetAttribute("poster"); movieLinks.Add(new MovieLink { Hash = hash, VideoLink = videoLink, ImageLink = posterImage }); } // Recursively process iframes foreach (HtmlWindow frame in document.Window.Frames) { ExtractVideoLinks(frame.Document); } } catch (Exception ex) { // Log the exception for debugging purposes. Don't let one iframe failure halt the entire process. Console.WriteLine($"Error processing iframe: {ex.Message}"); } }</code>
이 개선된 코드는 각 iframe에 대해 ExtractVideoLinks
을 재귀적으로 호출하여 잠재적인 예외를 적절하게 처리합니다. 또한 null 또는 비어 있는 src
속성과 중복된 비디오 링크에 대한 검사도 포함됩니다. 이 접근 방식을 사용하면 복잡한 웹 페이지에서 비디오 링크를 보다 안정적이고 완벽하게 추출할 수 있습니다.
위 내용은 WinForms WebBrowser 컨트롤의 프레임/IFrame 내에서 HtmlElement 값을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!