htmlagilitypack을 사용하여 모든 iframe 태그 추출

c# html html-agility-pack

문제

htmlagilitypack을 사용하여 여러 html 태그를 추출합니다. 내가하는 일을 heres :

        HtmlDoc = new HtmlDocument();
        StringReader sr = new StringReader(decodedHTML);
        HtmlDoc.Load(sr);
        sr.close();
        var anchor_tags = HtmlDoc.DocumentNode.SelectNodes("//" + HTML.TAG_ANCHOR + "[@" + HTML.ATTRIBUT_HREF + "]");
        var embed_tags = HtmlDoc.DocumentNode.SelectNodes("//" + HTML.TAG_EMBED + "[@" + HTML.TAG_EMBED_SRC + "]");
        var iframe_tags = HtmlDoc.DocumentNode.SelectNodes("//" + HTML.TAG_IFRAME + "[@" + HTML.TAG_IFRAME_SRC + "]");
        var img_tags = HtmlDoc.DocumentNode.SelectNodes("//" + HTML.TAG_IMG + "[@" + HTML.TAG_IMG_SRC + "]");
        var audio_tags = HtmlDoc.DocumentNode.SelectNodes("//" + HTML.TAG_AUDIO);       // may contain inner-html
        var object_tags = HtmlDoc.DocumentNode.SelectNodes("//" + HTML.TAG_OBJECT);     // may contain inner-html
        var video_tags = HtmlDoc.DocumentNode.SelectNodes("//" + HTML.TAG_VIDEO);       // may contain inner-html

여기서 디코딩 된 HTML은 문자열로 압축 된 HTML 페이지입니다. 그 후 위의 변수가 null인지 확인합니다.

        if (anchor_tags != null)
        {
            ExtractLinks_AnchorTags(anchor_tags);
        }
        if(audio_tags != null)
        {
            ExtractLinks_AudioTags(audio_tags);
        }
        if(embed_tags!=null)
        {
            ExtractLinks_EmbedTags(embed_tags);
        }
        if (iframe_tags != null)
        {
            ExtractLinks_iFrameTags(iframe_tags);
        }
        if (img_tags != null)
        {
            ExtractLinks_ImgTags(img_tags);
        }
        if (object_tags != null)
        {
            ExtractLinks_ObjectTags(object_tags);
        }
        if (video_tags != null)
        {
            ExtractLinks_ObjectTags(video_tags);
        }

extractLinks 메소드의 대부분은 호출되지 않기 때문에 일부는 확실히 null입니다. 예를 들면 내가 youtube를 방문 할 때. com. iframe 태그가 여러 개 있으며 코드에서 해당 태그를 인식하지 못합니다.

편집하다:

"[@" + HTML.TAG_IFRAME_SRC + "]" 하면 iframe이 인식되지만 src 특성으로 iframe을 추출하려고합니다. 그것을위한 올바른 xpath 구문은 무엇입니까?

수락 된 답변

HtmlAgilityPack은 iframe 요소의 내용을로드하지 않습니다.

iframe 의 내용을 검사하려면 src 속성 ( iframe 의 URI를 나타냄)을 읽고 별도의 웹 요청을 수행하여 HtmlDocument 요청을 별도의 HtmlDocument 로드하십시오.

도중에 이러한 가능한 문제에 유의하십시오.

  • src 속성은 상대 URI를 포함 할 수 있습니다. 예를 들어, http://www.example.com 을 방문하여 iframesrc="/samplePage" 가있는 것을 확인한 경우 먼저 해당 URI를 절대 URI (이 경우 http://www.example.com/samplePage )

  • 문서가 브라우저에서 렌더링 될 때 자바 스크립트를 통해 동적으로 추가되기 때문에 일부 iframe 요소에는 src 태그가 없을 수 있습니다. 자바 스크립트를 사용하여 전체 iframe 요소를 만들 수도 있습니다.이 요소는 일반 HttpWebRequest 하는 경우에도 표시되지 않습니다. 이러한 경우에는 페이지에있는 자바 스크립트를 분석하고 프로그램에서 해당 논리를 복제해야합니다.

최신 정보

src 특성을 가진 iframe 요소의 XPath 식은 다음과 같습니다. //iframe[@src]



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.