3

所以我在 chrome、autopagerizer 上添加了一个用户脚本。

目前我正在使用

//div[@class=\'entry-content\']/p[contains(.,\'chapter\') or contains(.,\'Chapter\') or preceding-sibling::p[contains(.,\'Chapter\')] and (following-sibling::p[contains(.,\'Translator Ramblings\')] or following-sibling::p[contains(.,\'Translating Ramblings\')] or following-sibling::p[contains(.,\'Ramblings\')] or following-sibling::p[starts-with(.,\'Translator\')] or following-sibling::p[starts-with(.,\'Translating\')])] 

我想要一个条件参数,当上面的代码没有解决任何问题时,它会选择

//h3[contains(.,\'Share this\')]

反而。我只希望在这种情况下选择 h3。我不知道如何在 xpath 中编写这个,我查找了其他相关问题,但他们没有解决这个问题。如果我不能用 xpath 解决这个问题,我将如何用 javascript 解决这个问题?我在铬上使用油脂猴。

4

1 回答 1

1

基本上,使用纯 XPath 1.0 实现您所解释的模式可能如下:

expression1 | expression2[not(expression1)]

所以,在你的问题的背景下:

  • 表达式1(截断)://div[@class=\'entry-content\']/p[...]
  • 表达式2://h3[contains(.,\'Share this\')]
  • 解决方案:

    //div[@class=\'entry-content\']/p[...]  | 
      //h3[contains(.,\'Share this\')]
          [not(//div[@class=\'entry-content\']/p[...])]
    

如果在 Javascript 的帮助下实现,这可能会更干净。只需执行表达式1,如果结果长度为0,则执行表达式2。

于 2017-04-19T04:16:34.683 回答