> 백엔드 개발 > C++ > WebBrowser 컨트롤의 프레임 및 IFrame에서 HtmlElements를 추출하는 방법은 무엇입니까?

WebBrowser 컨트롤의 프레임 및 IFrame에서 HtmlElements를 추출하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2025-01-18 23:26:10
원래의
843명이 탐색했습니다.

How to Extract HtmlElements from Frames and IFrames in WebBrowser Control?

WebBrowser 컨트롤의 프레임/iframe 내 HTML 요소 식별 및 구문 분석

문제 개요

쿼리에 명시된 바와 같이 WebBrowser 컨트롤을 사용하여 특정 웹사이트에서 비디오 클립 링크를 수집하는 동안 웹페이지에는 자체 문서와 요소를 호스팅하는 iframe이 포함되어 있습니다. 주 문서의 Html 요소에만 의존하여 video 요소를 찾을 수 없습니다. 따라서 필요한 정보를 찾으려면 iframe의 요소를 자세히 조사해야 합니다.

문제 해결: 프레임의 HtmlDocuments 구문 분석

프레임/iframe에서 HTML 요소를 효율적으로 검색하려면 다음 단계를 수행할 수 있습니다.

1. 식별 프레임워크:

  • 기본 문서의 모든 프레임이 포함된 HtmlWindowCollection에 액세스하려면 WebBrowser.Document.Window.Frames 속성을 사용하세요.

2. 프레임워크 문서를 구문 분석합니다.

  • 컬렉션의 각 HtmlWindow를 반복합니다.
  • 각 프레임에 대해 HtmlDocument 속성에 액세스하여 Html 요소를 검사합니다.

3. HTML 요소 속성 추출:

  • 인식된 Html 요소에서 관련 속성을 추출하려면 HtmlElement.GetAttribute 메서드를 사용하세요.

샘플 코드 조각:

다음은 프레임에서 HTML 요소를 구문 분석하는 방법을 보여주는 샘플 구현입니다.

<code class="language-c#">public class FrameHtmlElementParser
{
    private List<MovieLink> movieLinks = new List<MovieLink>(); //更正变量名

    public void ParseMovies(WebBrowser browser)
    {
        browser.DocumentCompleted += Browser_DocumentCompleted;
    }

    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 (movieLinks.Any(m => m.Hash == hash)) //更正变量名
                    {
                        // 完成此 URL 的解析。删除处理程序或采取其他适当的操作。
                        return;
                    }

                    string sourceImage = videoElement.GetAttribute("poster");
                    movieLinks.Add(new MovieLink //更正变量名
                    {
                        Hash = hash,
                        VideoLink = videoLink,
                        ImageLink = sourceImage
                    });
                }
            }
            catch (UnauthorizedAccessException) { } // 无法避免:忽略
            catch (InvalidOperationException) { }   // 无法避免:忽略
        }
    }
}

public class MovieLink //添加MovieLink类定义
{
    public int Hash { get; set; }
    public string VideoLink { get; set; }
    public string ImageLink { get; set; }
}</code>
로그인 후 복사

중복 데이터 방지:

중복된 ​​Html 요소 속성이 저장되는 것을 방지하기 위해 샘플 코드에서는 참조된 각 링크의 HashCode가 포함된 사용자 정의 MovieLink 클래스를 사용합니다. HashCode를 비교하여 movieLinks 목록에 새 항목을 추가하기 전에 중복 여부를 확인합니다.

코드가 다음과 같이 수정되었습니다.

  • 코드의 철자 및 대소문자 수정 오류: 예를 들어 movielinkMovieLink로 수정되고 VIDEOvideo으로 수정됩니다.
  • 추가된 MovieLink클래스 정의: 이렇게 하면 코드가 더욱 완전해지고 이해하기 쉬워집니다.
  • 주석을 약간 조정했습니다. 더 명확하고 정확해졌습니다.

이렇게 하면 코드를 더 쉽게 컴파일하고 실행할 수 있으며 C# 코딩 규칙과 더 일관성이 있게 됩니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿