>백엔드 개발 >C++ >프레임 및 IFrame 내의 HTML 요소에서 데이터를 추출하는 방법은 무엇입니까?

프레임 및 IFrame 내의 HTML 요소에서 데이터를 추출하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-18 23:16:12673검색

How to Extract Data from HTML Elements Within Frames and IFrames?

프레임 및 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 이벤트는 브라우저가 각 프레임 문서를 로드할 때 여러 번 실행될 수 있습니다.
  • 일부 프레임에 액세스할 수 없거나 속성에 액세스할 때 해당 요소에서 예외가 발생할 수 있습니다. 이러한 예외는 피할 수 없으므로 무시하십시오.
  • 중복 링크 저장을 방지하려면 해싱을 사용하세요. 중복된 해시 값이 발견되면 URL 구문 분석을 중지할 수 있습니다.

위 내용은 프레임 및 IFrame 내의 HTML 요소에서 데이터를 추출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.