6

私はこのようなコードを持っています:

Dim Document As New mshtml.HTMLDocument
Dim iDoc As mshtml.IHTMLDocument2 = CType(Document, mshtml.IHTMLDocument2)
iDoc.write(html)
iDoc.close()

ただし、このような HTML をロードすると、その中のすべての Javascript が実行され、「html」コードからいくつかのリソースへのリクエストが実行されます。

JavaScript とその他すべてのポップアップ (証明書エラーなど) を無効にしたい。

私の目的は、mshtml ドキュメントから DOM を使用して、信頼できる方法で HTML からいくつかのタグを抽出することです (正規表現の束ではなく)。

または、IE 関連のポップアップやアクティブなスクリプトを考えずに HTML をロードできる別の IE/Office DLL はありますか?

4

4 に答える 4

1

「html」を文字列としてすでに持っていて、その DOM ビューにアクセスしたいだけなら、なぜそれをブラウザ コントロールに「レンダリング」する必要があるのでしょうか。

私は .Net テクノロジに精通していませんが、ニーズにより適した StringToDOM/StringToJSON タイプのものが必要です。

同様に、上記で使用している「html」変数が URL の場合は、wget などを使用してマークアップを文字列として取得し、適切なツールで解析します。

.Net XML/DOM ライブラリを探して使用します。(繰り返しますが、これは言語の一部になると思いますが、よくわかりません)

PS簡単なGoogleの後、私はこれを見つけました(source)。代わりにこれを HTMLDocument で使用した場合、それが役立つかどうかはわかりません。

    if(typeof(DOMParser) == 'undefined') {
      DOMParser = function() {}
      DOMParser.prototype.parseFromString = function(str, contentType) {
      if(typeof(ActiveXObject) != 'undefined') {
        var xmldata = new ActiveXObject('MSXML.DomDocument');
        xmldata.async = false;
        xmldata.loadXML(str);
        return xmldata;
     } else if(typeof(XMLHttpRequest) != 'undefined') {
        var xmldata = new XMLHttpRequest;
        if(!contentType) {
          contentType = 'application/xml';
        }
        xmldata.open('GET', 'data:' + contentType + ';charset=utf-8,' + encodeURIComponent(str), false);
        if(xmldata.overrideMimeType) {
          xmldata.overrideMimeType(contentType);
        }
        xmldata.send(null);
        return xmldata.responseXML;
     }
  }
}
于 2008-09-26T12:46:18.767 に答える
0

リソースをスクリーンスクレイピングしているように聞こえますが、結果の HTML を使用してプログラムで何かを実行しようとしていますか?

事前に有効な XHTML であることがわかっている場合は、XHTML 文字列 (実際には XML) をXmlDocumentオブジェクトに読み込み、そのように操作します。

それ以外の場合、HTML が無効である可能性があるか、適切に形成されていない場合は、hpricotのようなものが必要になります(ただし、これは Ruby ライブラリです)。

于 2008-10-11T00:03:25.560 に答える