Получение свойств ширины и высоты первого изображения:
Учитывая, что в URL вашего вопроса есть одно изображение, рассмотрим следующую суть:
set theURL to "https://i.ebayimg.com/images/g/M58AAMXQaBtRAPkA/s-l500.jpg"
set js to "[].slice.call(document.querySelectorAll('img')).map(function(img) {return {src: img.src, width: img.width, height: img.height}});"
tell application "Safari"
make new document with properties {URL:theURL}
delay 4
set imgProps to (do JavaScript js in current tab of window 1)
if (length of imgProps > 0) then
set {width:width} to item 1 of imgProps
set {height:height} to item 1 of imgProps
set {src:src} to item 1 of imgProps
log width
log height
log src
end if
end tell
Пояснение:
Следующая строка JavaScript, которая назначена переменной AppleScript с именем js
:
[].slice.call(document.querySelectorAll('img')).map(function(img) {return {src: img.src, width: img.width, height: img.height}});
- Использует метод
document
querySelectorAll()
для получения NodeList
каждого img
элемента в DOM.
Часть [].slice.call(...)
преобразует NodeList
(которые как массив ) в массив - это позволяет нам использовать методы, предоставляемые массивом, такие как map()
.
Примечание: Для современных версий Safari, которые поддерживают ecmascript-6 , вы можете заменить это методом Array.from(...)
. Однако [].slice.call(...)
работает для версий Safari, которые поддерживают только ES5, и современных ES6 тоже.
Функция обратного вызова, предоставляемая map
, то есть этой части;
function(img) {return {src: img.src, width: img.width, height: img.height}}
return
s Объект со свойствами / значениями для src
, width
и height
для каждого img
элемента.
Часть make new document with properties {URL:theURL}
создает новый документ в Safari с заданным URL-адресом. По сути, он открывает / загружает URL.
Часть delay 4
использует команду delay
, чтобы приостановить выполнение скрипта (в этом примере 4 секунды), чтобы дать время загрузки веб-страницы перед продолжением выполнения JavaScript.
Важно Возможно, вам придется увеличить / уменьшить эту продолжительность в зависимости от скорости загрузки страницы. Есть также другие решения для ожидания загрузки веб-страницы, которые вы, возможно, захотите попробовать, такие как этот пост и этот пост . По сути, AppleScript API Safari не предоставляет встроенную функцию для этого, поэтому любое решение, включая использование команды delay
, представляет собой обходной путь / хак ¯\_(ツ)_/¯
Часть set imgProps to do JavaScript js in current tab of window 1
выполняет JavaScript и присваивает результат (т. Е. Список AppleScript из record 's') переменной imgProps
.
Финальные части:
set {width:width} to item 1 of imgProps
set {height:height} to item 1 of imgProps
set {src:src} to item 1 of imgProps
log width
log height
log src
присваивает значения каждому свойству (width
, height
и src
) от первого record
в list
их собственным переменным, а именно; width
, height
и src
.
Наконец, мы записываем значение для каждой переменной.
Примечание Эти последние части находятся в теле if (length of imgProps > 0) then
, поэтому они запускаются только в том случае, если данная веб-страница содержит одно или несколько изображений
Получение свойств ширины и высоты для всех изображений:
Тот же код Javascript, что и выше, можно использовать для получения свойств всех элементов img
на веб-странице. Заметное отличие в следующем примере:
- Предоставляется другой URL-адрес веб-страницы, который содержит более одного
img
элемента.
- Длительность
delay
увеличена (примечание: при необходимости измените это значение) .
repeat
используется для циклического перебора всех record
в list
и log
свойствах.
set theURL to "https://en.wikipedia.org/wiki/Car"
set js to "[].slice.call(document.querySelectorAll('img')).map(function(img) {return {src: img.src, width: img.width, height: img.height}});"
tell application "Safari"
make new document with properties {URL:theURL}
delay 8
set imgProps to do JavaScript js in current tab of window 1
if (length of imgProps > 0) then
repeat with img in items of imgProps
log width of img
log height of img
log src of img
log "-------"
end repeat
end if
end tell