我有这样的代码:
Dim Document As New mshtml.HTMLDocument
Dim iDoc As mshtml.IHTMLDocument2 = CType(Document, mshtml.IHTMLDocument2)
iDoc.write(html)
iDoc.close()
Run Code Online (Sandbox Code Playgroud)
但是,当我加载这样的HTML时,它会执行其中的所有Javascripts以及从"html"代码请求某些资源.
我想禁用javascript和所有其他弹出窗口(例如证书错误).
我的目标是使用mshtml文档中的DOM以可靠的方式从HTML中提取一些标签(而不是一堆正则表达式).
或者是否有另一个IE/Office DLL,我可以加载HTML而不考虑IE相关的弹出窗口或活动脚本?
小智 6
Dim Document As New mshtml.HTMLDocument
Dim iDoc As mshtml.IHTMLDocument2 = CType(Document, mshtml.IHTMLDocument2)
'add this code
iDoc.designMode="On"
iDoc.write(html)iDoc.close()
Run Code Online (Sandbox Code Playgroud)
如果您已经将“html”作为字符串,并且您只想访问它的 DOM 视图,那么为什么要将它“渲染”到浏览器控件呢?
我不熟悉.Net 技术,但必须有某种 StringToDOM/StringToJSON 类型的东西更适合您的需求。
同样,如果您上面使用的“html”变量是 URL,则只需使用 wget 或类似工具将标记检索为字符串,并使用适用的工具进行解析。
我会寻找 .Net XML/DOM 库并使用它。(同样,我认为这将是语言的一部分,但我不确定)
PS 经过快速谷歌后我发现了这个(来源)。不确定如果您要在 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;
}
}
}
Run Code Online (Sandbox Code Playgroud)