所以对于您的 xpath,您希望从可以轻松识别的元素或根开始,在这种情况下,第一个 div 类是 'a-row a-spacing-small':
//div[@class='a-row a-spacing-small']
接下来将确定您的元素与该根元素的关系,因此在这种情况下,您需要一个href,它应该在a 中,并且应该在我们确定的div 中......但是你不确定它是否是一个直接的孩子..所以你使用//:
//div[@class='a-row a-spacing-small']//a/@href
但是你只想要这个元素,如果它旁边的 div 满足条件..所以我们应该在我们已经创建的 xpath 之前的 xpath 开头放置一些东西......
//<somexpath>/div[@class='a-row a-spacing-small']//a/@href
但是什么xpath?我们所知道的是我们将第二个 div 设为根,因为它具有我们想要的条件......
//div[@class='a-row']
那么第一个div 与我们的新根有什么关系?它是preceding-sibling,因为它在新根之前并且在同一级别上。..
//div[@class='a-row']/preceding-sibling::div[@class='a-row a-spacing-small']//a/@href
现在无论条件是什么,我们都需要将它包含在根目录中...
//div[@class='a-row' and <condition>]/preceding-sibling::div[@class='a-row a-spacing-small']//a/@href
例子:
如果条件是 div 应该有一个带有文本“条件链接”的a:
//div[@class='a-row' and .//a[text()='conditional link']]/preceding-sibling::div[@class='a-row a-spacing-small']//a/@href
如果条件是 div 应该有一个 disabled 属性:
//div[@class='a-row' and @disabled]/preceding-sibling::div[@class='a-row a-spacing-small']//a/@href
没有禁用属性怎么样?
//div[@class='a-row' and not(@disabled)]/preceding-sibling::div[@class='a-row a-spacing-small']//a/@href
玩它...