我基本上处于与这个问题相同的情况Getting attribute using XPath 并且该问题中的解决方案在 Chrome 和 Firefox 中对我有效但是我必须使用 Safari(出于几个不同的原因,主要是 AppleScript)和在 Safari 中使用
/@
返回空结果。
是否有其他方法可以提取 xpath 属性?
他们/它必须与
document.evaluate
兼容。 (我有一个适用于 $x
的解决方案,但它不适用于 document.evaluate
,在 xpath 的末尾添加 .map(link => link.href)
)。
Update:看来我错了一部分-
@/
确实在我尝试过的所有情况下都有效。
重现我的问题的更多细节:在https://www.facebook.com/zuck/followers我想提取所有关注者的链接。我定位的元素如下所示:
<a class="x1i10hfl xjbqb8w x6umtig x1b1mbwd xaqea5y xav7gou x9f619 x1ypdohk xt0psk2 xe8uvvx xdj266r x11i5rnm xat24cr x1mh8g0r xexx8yu x4uap5 x18d9i69 xkhd6sd x16tdsg8 x1hl2dhg xggy1nq x1a2a7pz x1heor9g xt0b8zv" href="https://www.facebook.com/profile.php?id=100065103331942" role="link" tabindex="0">
一个简单的指向这个元素的xpath(后面会优化):
//div/div[1]/div/div[3]/div/div/div/div[1]/div[1]/div/div/div[4]/div/div/div/div/div/div/div/div/div[3]/div/div[2]/div[1]/a
如您所见,a 有四个属性,
class
、href
、role
和 tabindex
。
如果我在我的 xpath 末尾添加
/@class
,它的计算结果为
class="x1i10hfl xjbqb8w x6umtig x1b1mbwd xaqea5y xav7gou x9f619 x1ypdohk xt0psk2 xe8uvvx xdj266r x11i5rnm xat24cr x1mh8g0r xexx8yu x4uap5 x18d9i69 xkhd6sd x16tdsg8 x1hl2dhg xggy1nq x1a2a7pz x1heor9g xt0b8zv"
正如预期。添加
role
或 tabindex
作为结尾也会给出预期的结果,但如果我尝试使用 href
而不是其他三个属性,我只会得到 href
(实际字符串)作为结果。或者,它甚至更奇怪,更难以用文字来描述:
href
?这真的是真的吗?解决方法?使用
document.evaluate
选择链接元素,然后提取href
DOM属性如下图:
var links = []; var xpathResult = document.evaluate('//div/div[1]/div/div[3]/div/div/div/div[1]/div[1]/div/div/div[4]/div/div/div/div/div/div/div/div/div[3]/div/div[2]/div[1]/a', document, null); var link = null; while ((link = xpathResult.iterateNext()) != null) { links.push(link.href); } ; links