获取 xpath 属性的替代方法? Safari 不支持 /@。必须使用 document.evaluate

问题描述 投票:0回答:1

我基本上处于与这个问题相同的情况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
(实际字符串)作为结果。或者,它甚至更奇怪,更难以用文字来描述:

折叠的结果

扩展结果

我将其解释为 Safari 以不同于其他 XML 属性的方式处理字符串
href
?这真的是真的吗?解决方法?

xpath safari
1个回答
0
投票

使用

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
© www.soinside.com 2019 - 2024. All rights reserved.