AppleScript не выйдет за пределы верхнего уровня
Я нашел скрипт для загрузки информации о криптовалютах, чтобы я мог загрузить его в электронную таблицу Numbers с помощью AppleScript. Это сценарий:
set mySheetName to "Coin Prices"
set myTableName to "Coin Prices"
set tgtCell to "A2"
set theHtml to do shell script "curl -s " & quoted form of "https://www.worldcoinindex.com"
set text item delimiters to {"<tbody>", "</tbody>"}
set tableContents to theHtml's text item 2 # item 2 is the body of the price table
set text item delimiters to {"<h2>"} # site uses new h2 for each currency
set tableChunks to tableContents's text items 2 thru -1
set pasteStr to ""
repeat with aChunk in tableChunks
set text item delimiters to "><span>$ </span><span class=\"span\">"
tell aChunk's text item 1 to set {theSymbol, thePrice} to {first word, last word}
set pasteStr to pasteStr & theSymbol & tab & thePrice & return
end repeat
set the clipboard to pasteStr
tell application "Numbers"
tell front document
tell sheet mySheetName to tell table myTableName
activate
set selection range to range tgtCell
delay 0.3
tell application "System Events" to keystroke "v" using {option down, shift down, command down}
end tell
end tell
end tell
Он отлично работает, пока я не установлю эту строку:
set theHtml to do shell script "curl -s " & quoted form of "https://www.worldcoinindex.com/watchlist"
Я проверил код веб-страницы, и он точно такой же, но я получаю большое длинное окно с ошибкой, что-то связано с пунктом 2. Я не буду копировать и вставлять, потому что окно с ошибкой содержит весь исходный код веб-страницы. Однако ошибка читается так:
Невозможно получить текстовый элемент 2 из
Оттуда исходный код.
Почему этот сценарий работает на основе URL-адреса, а не подкаталогов URL-адреса?
Спасибо за вашу помощь, ребята.
2 ответа
Поскольку у меня нет учетной записи для доступа
https://www.worldcoinindex.com/watchlist
и посмотрите его исходный код при входе в систему, я верю вам на слово, что он имеет
<tbody>
а также
</tbody>
теги и предлагают альтернативное решение для использования
curl
.
Предполагая, что вы используете Safari и вошли в систему по целевому URL-адресу, а страница полностью загружена, вы можете использовать следующий пример кода AppleScript для получения искомых данных .
Добавьте следующее в начало существующего сценария AppleScript , комментируя
set theHtml to do shell script ...
строка кода .
tell application "Safari" to ¬
set theHtml to do JavaScript ¬
"document.getElementById('myTable').innerHTML;" in document 1
Обратите внимание, что
myTable
в JavaScript команду приходит из таблицы на основной домен и , возможно , должны быть скорректированы для наблюдения .
Посмотрите на источник страницы, например:
<table id="myTable" class= ... >
<thead>
Вы также можете использовать, например:
"document.getElementsByClassName('...')[0].innerHTML;"in document 1
Замена
...
как показано в исходном коде для
class=
Короткий ответ заключается в том, что главная страница содержит явную таблицу html, в то время как страница списка наблюдения кажется структурированной серией элементов div, сгенерированных javascript и сделанных в виде таблицы. На странице списка наблюдения нет элемента tbody, потому что там нет таблицы. Команда текстовых элементов разделяет первую страницу на три части (вторая из которых - та, которую вы хотите); он вообще не разделяет страницу списка наблюдения, что создает массив с одним элементом, содержащим весь html. Когда вы запрашиваете у массива из 1 элемента его второй элемент, вы получаете сообщение об ошибке.
Вам нужно будет изучить HTML-код второй страницы и выяснить, как разделить текст, чтобы извлечь нужную информацию.