我使用AppleScript来控制Safari浏览器。现在我需要在Safari浏览器中使用AppleScript的do javascript
来执行Javascript,以评估Xpath并使用AppleScript中的返回值。
这个管用
$x('//div/div/a').map(link => link.href)
但当我尝试这样的事情时
document.evaluate(('//div/div/a').map(link => link.href), document, null, 0, null)
我得到
TypeError: ('//div/div/a').map is not a function. (In '('//div/div/a').map(link => link.href)', '('//div/div/a').map' is undefined)
根据Google的说法,这个错误消息意味着我试图在non-array object
上使用map
。我想我明白这意味着什么-('//div/div/a')在执行.map(link => link.href)
之前没有被计算,但我不知道如何表达这个语句,以便map
可以应用于数组。
如果我像这样加上括号
(document.evaluate(('//div/div/a')
).map(link => link.href), document, null, 0, null)
document.evaluate
没有得到足够的参数。我也试过
(document.evaluate(('//div/div/a'), document, null, 0, null))
).map(link => link.href)
以为document.evaluate
会返回一个数组,但得到的错误消息与上面的map is not a function
相同。
我不确定document.evaluate
是否给出了一个有意义的结果:
document.evaluate(('//div/div/a'), document, null, XPathResult.ANY_TYPE, null)
XPathResult {resultType: 4, invalidIteratorState: false, iterateNext: function, snapshotItem: function, ANY_TYPE: 0, …} = $3
这基本上不是一个空结果吗?也就是说,不是一个数组?
如何使用'//div/div/a').map(link =〉document.evaluate中的link.href或类似函数,以获得类似数组的数据结构?
更新:我发现了这个https://codereview.stackexchange.com/questions/167571/evaluating-an-xpath-with-document-evaluate-to-get-an-array-of-nodes,它在一个表面上工作-但是我又回到了原来的problem-由于某种原因,我不能使用xpath获得href属性-唯一的解决方案似乎是使用.map(link => link.href)
2条答案
按热度按时间o8x7eapl1#
在XPathResult上使用
iterateNext()
方法57hvy0tb2#
我在Firefox中导航到https://www.facebook.com/zuck/followers,打开JS控制台,并运行以下代码,该代码与您在上面的更新中链接到的页面中的代码相同,但XPath更改了:
结果是一个
href
属性数组,其中包含Zuckerberg追随者的个人资料页面的URL。这在你的浏览器中对你有效吗?如果不有效,它在不同的浏览器中对你有效吗?