首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么用于.Net的MSHTML没有querySelector和querySelectorAll,或者它们在哪里?

为什么用于.Net的MSHTML没有querySelector和querySelectorAll,或者它们在哪里?
EN

Stack Overflow用户
提问于 2014-01-17 00:03:52
回答 2查看 1.9K关注 0票数 4

我想使用MSHTML1来访问IE中的DOM,但我刚刚发现它在HTML文档类中缺少querySelector和querySelectorAll方法,否则通过CSS选择器获取文档中的元素将非常有帮助。

目前我能想到的唯一解决办法就是通过执行脚本来做所有的事情,但这太糟糕了。

有没有版本的微软超文本标记语言有两种方法(querySelector和querySelectorAll)?有没有其他库(希望是微软的官方.Net库)可以使用这两种方法或它们的等价物?

1%ProgramFiles(X86)%\Microsoft.NET\Primary互操作Assemblies\Microsoft.mshtml.dll

EN

回答 2

Stack Overflow用户

发布于 2014-01-17 03:16:15

querySelector()方法和朋友在MSHtml和IE DOM中仍然存在,但问题是大多数程序员的机器上的querySelector已经非常过时了。在我机器上的GAC中注册的版本号是7.0.3300.0,可以追溯到2002年。

有一个解决办法,你可以生成你自己的互操作库,并避免在GAC中的那个。诀窍是故意通过创建一个没有强名称的互操作程序集来生成不匹配,这样它就不能与GAC中的程序集匹配。请确保仅在VS2010或更高版本上执行此操作,您希望利用嵌入互操作类型功能。

启动Visual Studio命令提示符,并导航到项目目录。并执行以下命令:

代码语言:javascript
复制
  Tlbimp c:\windows\system32\mshtml.tlb

它将滚动几分钟,类型库非常大,并吐出几个看起来很讨厌的警告,你可以忽略它们。返回到VS,删除现有的MSHTML引用并使用Add Reference,Browse选项卡。选择由Tlbimp生成的MSHTML.dll文件。

请记住,您现在使用的interop库与您计算机上的IE版本兼容。不一定是您的用户拥有的版本,因此从技术上讲,您的程序可能会失败。你肯定是非常倒霉的。

票数 8
EN

Stack Overflow用户

发布于 2016-09-27 02:21:19

昨天我注意到了同样的问题,我找到了解决方案。

下面的示例代码适用于我:

代码语言:javascript
复制
Document.querySelectorAll("#navbar_search>a").item(0).click();

如果我尝试做“同样的事情”,但是使用下面的代码,它失败了:

代码语言:javascript
复制
HTMLDocument doc;
doc = ie.Document;
doc.querySelectorAll("#navbar_search>a").item(0).click();

我不是COM专家,但我认为第一种解决方案是后期绑定(依赖关系在运行时解决),而第二种解决方案是编译器时绑定,它依赖于“好的”预定义的库,而mshtml并非如此。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21166818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档