Я пишу сценарий AppleScript для очистки веб-страницы в Safari, и есть часть, с которой я боролся довольно долго.
Это возвращает необходимый текст: log (do JavaScript "document.querySelector('h1 > span').innerHTML;" in front document)
И это не так: log (do JavaScript "document.evaluate('//h1/span/text()[normalize-space()]', document.body, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;" in front document)
В инспекторе браузера оба подхода работают, но в AppleScript у меня не работает ни один вариант xpaths.
ИМне действительно нужно использовать функцию document.evaluate
для выполнения таких вещей, как document.evaluate("//p[contains(., 'Metrics')]/following-sibling::p[1]/text()[normalize-space()]", document.body, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
в том же сценарии.
Как это нужно переписать, чтобы начать выводить результаты в AppleScript?
Пример HTML-кода:
<html>
<body>
<h1>
<span>Test Entry</span>
</h1>
</body>
</html>
Вывод Safari Web Inspector (демонстрирует, что querySelector
и evaluate
работают без проблем):
> document.querySelector('h1 > span').innerHTML;
< "Test Entry"
> document.evaluate('//h1/span/text()[normalize-space()]', document.body, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
< "Test Entry"
Код редактора AppleScript:
tell application "Safari"
log (do JavaScript "document.querySelector('h1 > span').innerHTML;" in front document)
log (do JavaScript "document.evaluate('//h1/span/text()[normalize-space()]', document.body, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;" in front document)
end tell
Вывод редактора AppleScript (демонстрирует, что querySelector
работает, а evaluate
не работает):
(*Test Entry*)
(**)