VBA当前支持哪些CSS选择器?

VBA当前支持哪些CSS选择器?,vba,css-selectors,mshtml,queryselector,Vba,Css Selectors,Mshtml,Queryselector,早在2021年5月19日,我就最近(4月-5月21日)对mshtml.dll和后期绑定引用相关接口的可疑更改写了Q&A。这是第二部分,如果你愿意的话 在此之前,在诸如和之类的问题中,我已经指出了缺乏对带有mshtml.dll的各种CSS选择器的支持,特别是在以下方面。在上述问题中,我强调了nth-child()和nth-of-type()没有针对MSHTML实现 通常,如前所示,不受支持的选择器语法会导致: 运行时错误“-2140143604(8070000c)”:无法完成 错误8070000c

早在2021年5月19日,我就最近(4月-5月21日)对
mshtml.dll
和后期绑定引用相关接口的可疑更改写了Q&A。这是第二部分,如果你愿意的话

在此之前,在诸如和之类的问题中,我已经指出了缺乏对带有
mshtml.dll
的各种CSS选择器的支持,特别是在以下方面。在上述问题中,我强调了
nth-child()
nth-of-type()
没有针对
MSHTML
实现

通常,如前所示,不受支持的选择器语法会导致:

运行时错误“-2140143604(8070000c)”:无法完成 错误8070000c导致的操作

我预计会出现一些问题,因为与
Internet Explorer(IE)
(与
MSHTML
相关的)相关的各种版本/平台不再受支持-请参阅我的。我没有预料到的 查找支持的CSS选择器的最新改进。以以下示例为例:

Option Explicit

''Required references:
'' Microsoft HTML Object Library

Public Sub CssTest()

    Const URL = "https://books.toscrape.com/"
    Dim html As MSHTML.HTMLDocument
   
    Set html = New MSHTML.HTMLDocument

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", URL, False
        .send
        html.body.innerHTML = .responseText
    End With
    
    Debug.Print html.querySelector("meta:nth-of-type(2)").outerHTML
    
End Sub
在4月至5月21日之前,由于使用了未实现的语法,这可能会出错。 现在,在我的设置中,我在5月初(最晚)看到了对
mshtml.dll
的更新,我得到的结果与通过自动Internet Explorer实例运行的结果相同,该实例已经得到支持:

<meta name="created" content="24th Jun 2016 09:29">

反馈:

OS Name Microsoft Windows 10 Pro
Version 10.0.19042 Build 19042
System Type x64-based PC
Microsoft® Excel® 2019 MSO (16.0.13929.20206) 32-bit (Microsoft Office Professional Plus)
Version 2104 Build 13929.20373
mshtml.dll file  11.00.19041.985
ieframe.dll file 11.0.19041.964

与之前的问答一样,如果您对设置的任何反馈没有/没有看到这些更改,我将不胜感激。我将在此添加反馈,供其他人参考。

tl;dr;

<> P>对CSS选择器和<代码>元素.QueReleStudio> <代码>有更大的支持(允许在代码< > QuestS选择器(ALL)调用中有更大的灵活性。这大大增强了<代码> MsHTML<代码>类,在CSS选择器方面,使它与<>代码> SeleBasic < /C> >。


动机:

OS Name Microsoft Windows 10 Pro
Version 10.0.19042 Build 19042
System Type x64-based PC
Microsoft® Excel® 2019 MSO (16.0.13929.20206) 32-bit (Microsoft Office Professional Plus)
Version 2104 Build 13929.20373
mshtml.dll file  11.00.19041.985
ieframe.dll file 11.0.19041.964
一段时间以来,我一直想写一份受支持的选择器列表,因为缺乏与VBA相关的文档,以及学习什么有用什么不有用的反复尝试性质。这一最新的变化促使我这么做,并包括那些目前支持在其中使用CSS选择器的库


注意事项:

OS Name Microsoft Windows 10 Pro
Version 10.0.19042 Build 19042
System Type x64-based PC
Microsoft® Excel® 2019 MSO (16.0.13929.20206) 32-bit (Microsoft Office Professional Plus)
Version 2104 Build 13929.20373
mshtml.dll file  11.00.19041.985
ieframe.dll file 11.0.19041.964
  • 这并非详尽无遗,而是相当全面的
  • 如果您发现任何错误,特别是关于Selenium Basic的错误,我必须从内存中写入,请通知我,我将进行相应的编辑
  • 最近的变化,由汇总表(JSFIDLE)中的阴影单元格表示,标记为✔* , 在下面的简化表格中,它们与我的设置相关。您的里程可能会有所不同,例如CSS选择器根本不受支持
    之前和之后:

    OS Name Microsoft Windows 10 Pro
    Version 10.0.19042 Build 19042
    System Type x64-based PC
    Microsoft® Excel® 2019 MSO (16.0.13929.20206) 32-bit (Microsoft Office Professional Plus)
    Version 2104 Build 13929.20373
    mshtml.dll file  11.00.19041.985
    ieframe.dll file 11.0.19041.964
    
    传统上,就支持CSS选择器的库而言,VBA中CSS选择器的表现力如下:

    到目前为止,Selenium实现了最多的CSS选择器

    当前状态:

    OS Name Microsoft Windows 10 Pro
    Version 10.0.19042 Build 19042
    System Type x64-based PC
    Microsoft® Excel® 2019 MSO (16.0.13929.20206) 32-bit (Microsoft Office Professional Plus)
    Version 2104 Build 13929.20373
    mshtml.dll file  11.00.19041.985
    ieframe.dll file 11.0.19041.964
    
    我认为已实现的选择器的当前状态如下(为图像质量感到抱歉,即使您单击以放大表格-请参阅以获得最清晰的表格视图):

    我也把它作为一个简化的HTML插入,所以你可以点击超链接。请点击代码插入下面的运行代码片段,然后是<强>全页<强>链接。道歉,表很大,我甚至没有覆盖所有可想到的选择器-只有我认为可能经常使用的主要选项。插入一个FANC。y表使我超出了身体字符限制,所以我们到了。对于一个奇特的表,请看这个-新支持的是阴影

    
    VBA:有效的CSS选择器2021-05-30
    VBA:有效的CSS选择器2021-05-30
    图案
    代表
    描述
    水平仪
    Microsoft HTML对象库(MSHTML)
    Microsoft Internet Explorer控件(SHDocVw)
    Selenium类型库(Selenium)
    评论
    *
    任何元素
    2.
    ✔
    ✔
    ✔
    E
    E型元素
    1.
    ✔
    ✔
    ✔
    E[foo]
    具有“foo”属性的E元素
    2.
    ✔
    ✔
    ✔
    E[foo=“bar”]
    “foo”属性值与“bar”完全相等的E元素
    2.
    ✔
    ✔
    ✔
    E[foo~=“bar”]
    一种E元素,其“foo”属性值是一组以空格分隔的值,其中一个值正好等于“bar”
    2.
    ✔
    ✔
    ✔
    E[foo^=“bar”]
    一个E元素,其“foo”属性值正好以字符串“bar”开头
    3.
    ✔
    ✔
    ✔
    E[foo$=“bar”]
    一个E元素,其“foo”属性值以字符串“bar”结尾