1

htmlagilitypackを使用していくつかのhtmlタグを抽出しています。これが私がすることです:

        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

ここで、decodeHTMLは、文字列にパックされた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-methodsのほとんどは呼び出されないため、それらの一部は完全にnullです。たとえば、私がyoutubeにアクセスしているとき。com。いくつかのiframeタグがあり、コードはそれらを認識しません。

編集:

iframeを削除すると "[@" + HTML.TAG_IFRAME_SRC + "]"認識されますが、src属性を使用してiframeを抽出したいだけです。そのための正しいxpath構文は何ですか?

4

1 に答える 1

1

iframeHtmlAgilityPackは要素のコンテンツをロードしません。

の内容を検査するには、属性(のURIを表す)をiframe読み取り、別のWeb要求を実行して、それを別のにロードします。srciframeHtmlDocument

途中で、次の考えられる問題に注意してください。

  • src属性には相対URIが含まれる場合があります。たとえば、にアクセスhttp://www.example.comしてがを持っていることを確認した場合iframesrc="/samplePage"、最初にそれを絶対URI(この場合はhttp://www.example.com/samplePage)に変換する必要があります。

  • ドキュメントがブラウザでレンダリングされるときに、javascriptを介して動的に追加されるため、一部の要素にタグiframeがない可能性があります。また、javascriptを使用して要素src全体を作成することもできます。これは、通常のを実行しただけでは表示されない要素です。このような場合は、ページにあるjavascriptを分析し、そのロジックをプログラムに複製する必要があります。iframeHttpWebRequest

アップデート

属性iframeを持つ要素のXPath式は次のとおりです。src//iframe[@src]

于 2013-01-15T13:55:02.830 に答える