【问题标题】:Why does google-chrome-devtools identifies less number of elements through XPath then number of elements identified through CssSelector为什么 google-chrome-devtools 通过 XPath 识别的元素数量少于通过 CssSelector 识别的元素数量
【发布时间】:2019-08-27 08:59:26
【问题描述】:

我正在尝试使用 识别包含此webpage 上的评论 的元素。

使用以下

//div[@class='text show-more__control']

标识的元素数量为:15

快照:

使用以下

div.text.show-more__control

标识的元素数量为:25

快照:

那么,为什么 google-chrome-devtools 通过 XPath 识别的元素数量少于通过 CssSelector 识别的元素数量

【问题讨论】:

    标签: google-chrome-devtools xpath css-selectors css google-chrome xpath css-selectors google-chrome-devtools


    【解决方案1】:

    XPath 正在为字符串 text show-more__control 词法检查 @class 属性值。

    CSS 表达式在语义上检查 @class 属性值,这些值指示 div 应该同时具有 textshow-more__control 样式。

    有 10 个满足 CSS 语义选择标准的 div 元素不符合 XPath 词法标准,因为它们的 @class 在词法上是

    text show-more__control clickable
                           ^^^^^^^^^^
    

    测试@class 的常用解决方法是分别填充和检查每个类:

    //div[    contains(concat(' ',@class,' '), ' text ')
          and contains(concat(' ',@class,' '), ' show-more__control ') ]
    

    这个 XPath 返回 25 个 div 元素,就像 CSS 选择器一样。

    注意:这里特别棘手的是clickable 部分div/@class 属性值不存在于静态源中,仅存在于div 对象的动态属性中。

    【讨论】:

    • 一个问题是//div[ contains(concat(' ',@class,' '), ' text ') and contains(concat(' ',@class,' '), ' show-more__control ') ](使用concat和空间诱导)和//div[contains(@class, 'text') and contains(@class, 'show-more__control')](没有空间和concat())之间有什么根本区别吗?两者似乎都返回 25
    • 是的,如果没有分隔间距,'text' 可能会与 'texting''context' 等类进行错误匹配。
    猜你喜欢
    • 2020-06-20
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 2021-11-15
    相关资源
    最近更新 更多