使用样式显示过滤内容:在XPath表达式中为none

Clu*_*ate 14 xpath

我正在尝试用python中的lxml进行解析,这是我的输出

<td>
    <span style="display:inline">text1</span>
    <span style="display:none">text2</span>
    <span>text3</span>
    text4
</td>
Run Code Online (Sandbox Code Playgroud)

以为我足够聪明,可以使用以下内容

tree = tr.xpath("//*[contains(@style,'inline')]/text()")
Run Code Online (Sandbox Code Playgroud)

但后来我以为我只会看到text1.我想要的是看到text3和text4也是如此,以便输出

['text1','text3','text4']

有人能把我送到正确的方向吗?

Cha*_*ffy 20

用以下内容明确排除任何内容display:none:

tree = tr.xpath("//*[not(contains(@style,'display:none'))]/text()")
Run Code Online (Sandbox Code Playgroud)

也就是说 - 这只是浏览器实际做的一个遥远的近似值; 如果您需要严格准确的结果,那么您希望驾驶实际的浏览器(如Selenium,嵌入API等).

  • 如果在 DOM 中写成带有空格,比如“display: none”,那么它就不起作用。 (2认同)