Xpath "preceding" 检查以查找值
Xpath "preceding" check to find value
应用 Xpath 的 html 有点长,因此将 link 粘贴到需要触发 Xpath 的页面。
我只想获取商品的 "Buy New" 价格,前提是该商品是 "Fulfilled By Amazon"。
我在 C# 上使用 Html Agility Pack。
这是我的尝试。我首先尝试查看该商品是否由亚马逊配送。
//div[@id='buyNewInner']//descendant::a[contains(@href,'isAmazonFulfilled=1')]
但我不知道如何从这里继续前往前面的节点并获取商品的价格,在本例中为 99.99 美元
目的不仅是用一个单一的 Xpath 来获得这个价格,而且还要确保我尽可能避免对各个节点相对于彼此的位置的假设,并尝试匹配 w.r.t 可见文本而不是 Html节点定位类似div//span[1]
。 (这里的 Xpath 表示与第一个跨度匹配——如果可能的话我会尽量避免)
所以在这种情况下,我要实现的匹配逻辑是:
找到 "Buy New" 之后的价格,前提是它出现在 "FulFillment By Amazon"
之前
需要使用..返回到节点的父亲。使用您提供的示例页面,添加 ../../../../div[@id='buyNewSection'] 将您带到兄弟姐妹div 你需要的。 XPath:
//div[@id='buyNewInner']//descendant::a[contains(@href,'isAmazonFulfilled=1')]/../../../../div[@id='buyNewSection']//span[contains(@class,'offer-price')]
会显示
99.99 美元
这是一种可能的 XPath(为了便于阅读而格式化),它是根据您检查该商品是否由 Amazon 配送的尝试构建的。
//div[
@id='buyNewInner'
and
.//descendant::a[contains(@href,'isAmazonFulfilled=1')]
]
/preceding-sibling::div[@id='buyNewSection']
//span[contains(@class,'offer-price')]
XPath 的第一部分 returns <div id="buyNewInner">
元素 仅 如果项目是 "Fulfilled By Amazon" :
//div[
@id='buyNewInner'
and
.//descendant::a[contains(@href,'isAmazonFulfilled=1')]
]
下一位returns <div id="buyNewSection">
假定位于buyNewInner
div 之前的同一级别,因此我们使用preceding-sibling
:
/preceding-sibling::div[@id='buyNewSection']
然后最后一部分直接进入包含商品价格的 <span>
:
//span[contains(@class,'offer-price')]
应用 Xpath 的 html 有点长,因此将 link 粘贴到需要触发 Xpath 的页面。
我只想获取商品的 "Buy New" 价格,前提是该商品是 "Fulfilled By Amazon"。
我在 C# 上使用 Html Agility Pack。
这是我的尝试。我首先尝试查看该商品是否由亚马逊配送。
//div[@id='buyNewInner']//descendant::a[contains(@href,'isAmazonFulfilled=1')]
但我不知道如何从这里继续前往前面的节点并获取商品的价格,在本例中为 99.99 美元
目的不仅是用一个单一的 Xpath 来获得这个价格,而且还要确保我尽可能避免对各个节点相对于彼此的位置的假设,并尝试匹配 w.r.t 可见文本而不是 Html节点定位类似div//span[1]
。 (这里的 Xpath 表示与第一个跨度匹配——如果可能的话我会尽量避免)
所以在这种情况下,我要实现的匹配逻辑是:
找到 "Buy New" 之后的价格,前提是它出现在 "FulFillment By Amazon"
之前需要使用..返回到节点的父亲。使用您提供的示例页面,添加 ../../../../div[@id='buyNewSection'] 将您带到兄弟姐妹div 你需要的。 XPath:
//div[@id='buyNewInner']//descendant::a[contains(@href,'isAmazonFulfilled=1')]/../../../../div[@id='buyNewSection']//span[contains(@class,'offer-price')]
会显示
99.99 美元
这是一种可能的 XPath(为了便于阅读而格式化),它是根据您检查该商品是否由 Amazon 配送的尝试构建的。
//div[
@id='buyNewInner'
and
.//descendant::a[contains(@href,'isAmazonFulfilled=1')]
]
/preceding-sibling::div[@id='buyNewSection']
//span[contains(@class,'offer-price')]
XPath 的第一部分 returns <div id="buyNewInner">
元素 仅 如果项目是 "Fulfilled By Amazon" :
//div[
@id='buyNewInner'
and
.//descendant::a[contains(@href,'isAmazonFulfilled=1')]
]
下一位returns <div id="buyNewSection">
假定位于buyNewInner
div 之前的同一级别,因此我们使用preceding-sibling
:
/preceding-sibling::div[@id='buyNewSection']
然后最后一部分直接进入包含商品价格的 <span>
:
//span[contains(@class,'offer-price')]