프레임 및 iframe 내의 HTML 요소 구문 분석
제공된 웹사이트에서 동영상 링크를 추출하는 중 <video>
태그를 찾는 데 문제가 있습니다. 이는 웹사이트가 콘텐츠의 다양한 부분을 별도의 HTML 문서로 효과적으로 분리하는 프레임(iframe)을 사용하기 때문입니다.
이 문제를 해결하려면 기본 문서의 프레임 모음을 파헤쳐야 합니다. 각 프레임에는 자체 HTML 문서가 포함되어 있으며 웹 사이트의 모든 부분에서 데이터를 추출하려면 이러한 개별 문서에 액세스해야 합니다.
해결책:
프레임 컬렉션에 액세스하려면 WebBrowser.Document.Window.Frames
속성을 사용하세요. 이 컬렉션의 각 HtmlWindow
에는 고유한 HtmlDocument
개체가 있습니다.
Frame.Document.Body.GetElementsByTagName()
메소드를 사용하여 필요한 요소를 검색하여 각 프레임의 문서를 반복하도록 코드를 수정하세요. 요소 속성을 추출하려면 HtmlElement.GetAttribute
을 사용하세요.
예:
<code class="language-csharp">List<MovieLink> moviesLinks = new List<MovieLink>(); private void Browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { var browser = sender as WebBrowser; if (browser.ReadyState != WebBrowserReadyState.Complete) return; var documentFrames = browser.Document.Window.Frames; foreach (HtmlWindow frame in documentFrames) { try { var videoElement = frame.Document.Body .GetElementsByTagName("VIDEO").OfType<HtmlElement>().FirstOrDefault(); if (videoElement != null) { string videoLink = videoElement.GetAttribute("src"); int hash = videoLink.GetHashCode(); if (moviesLinks.Any(m => m.Hash == hash)) { return; // 此 URL 的解析已完成 } string sourceImage = videoElement.GetAttribute("poster"); moviesLinks.Add(new MovieLink() { Hash = hash, VideoLink = videoLink, ImageLink = sourceImage }); } } catch (UnauthorizedAccessException) { } // 忽略此异常 catch (InvalidOperationException) { } // 忽略此异常 } }</code>
지침:
DocumentCompleted
이벤트는 브라우저가 각 프레임 문서를 로드할 때 여러 번 실행될 수 있습니다. 위 내용은 프레임 및 IFrame 내의 HTML 요소에서 데이터를 추출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!