Apple- или Shellscript | получить аттр. "src" изображения по его имени класса и скачать его - PullRequest
0 голосов
/ 04 мая 2018

Борьба с этим:

  1. Цикл через переменную All_URL, содержащую URL в виде строки
  2. получить все атрибуты src из изображений с помощью класса "image_stack__image js-default-img"
  3. загрузите все изображения в папку и используйте URL-адрес со страницы источника в качестве имени img.

Это все, что у меня есть к настоящему времени, и я не смог найти работающее решение (за исключением действия в Automator), которое работает как задумано.

    tell application "Finder"
        set myPath to container of (path to me) as text -- SET MAIN PATH
    end tell


    set AllUrls to {"https://teespring.com/shop/CLASSIC-DODGE-CHARGER-MOP?aid=marketplace&tsmac=marketplace&tsmic=search#pid=212&cid=5819&sid=front", "https://teespring.com/shop/greaser-mechanics-t-shirt?aid=marketplace&tsmac=marketplace&tsmic=campaign#pid=2&cid=2397&sid=front"}

    --set ImageSrc to (script to get the src attribute from the class "image_stack__image js-default-img"

    --set IMGname to the Page URL where the image is

    set dFolder to myPath & "thumbnails"

    set fName to IMGname & ".jpg" as string


    do shell script ("mkdir -p " & dFolder & "; curl -A/--user-agent " & AllUrls & " >> " & (dFolder & fName))

Каждая помощь высоко ценится. Спасибо

UPDATE:

  1. Удалось получить src / url из изображения, содержащего класс необходимо.
  2. Удалось загрузить его в нужную папку.
  3. Необходимо установить имя сохраненного изображения в URL источника, где изображение пришел от.
  4. Нужно делать все это в цикле, так как у меня будут разные URL и не один, как в примере.

-

set home_path to (((path to me as text) & "::") as alias) as string

tell application "Safari"
    open location "https://teespring.com/shop/CLASSIC-DODGE-CHARGER-MOP?aid=marketplace&tsmac=marketplace&tsmic=search#pid=212&cid=5819&sid=front"
    set campaign_thumbnail to do JavaScript "document.querySelector('.image_stack__image').src" in document 1
end tell


do shell script "curl -f " & quoted form of campaign_thumbnail & " -o " & quoted form of (POSIX path of home_path) & "thumbnails/test.jpg"

ОБНОВЛЕНИЕ 2:

В соответствии с кодом CJK:

  1. "cd ~ / thumbnails;" | Сохраняет ли на рабочем столе папку "эскизы". Мне нужен относительный путь к папка scripts на случай, если пользователь переместит папку. Не нашел решение для curl для него, но "найти приложение поиска", который работает (Line1)
  2. Загруженные файлы имеют одинаковое окончание после последнего / (560.jpg) и я попытался использовать «установить My_Name, чтобы сделать сценарий оболочки« uuidgen »и добавить его в ш. Но я бы лучше назвал файлы 1.jpg, 2.jpg и т. Д.

    tell application "Finder" -- get filepath to file container/folder
        set myPath to container of (path to me) as text -- SET MAIN PATH
    end tell
    
    set allURLs to {"https://teespring.com/shop/CLASSIC-DODGE-CHARGER-MOP?aid=marketplace&tsmac=marketplace&tsmic=search#pid=212&cid=5819&sid=front", "https://teespring.com/shop/dodge-mopar-m?aid=marketplace&tsmac=marketplace&tsmic=search#pid=2&cid=2397&sid=front"}
    
    set JS to "document.querySelector('.image_stack__image').src"
    set sh to {"cd ~/desktop/thumbnails;", "curl --remote-name-all ", {}} -- need to set the location to the home folder of the script and the filename to 1.jpg , 2.jpg ..
    
    set the text item delimiters to space
    
    tell application "Safari" to repeat with www in allURLs
    set D to (make new document with properties {URL:www})
    
    # Wait until webpage has loaded
    tell D to repeat until not (exists)
        delay 0.5
    end repeat
    
    set the last item of sh to do JavaScript JS in the front document
    
    close the front document
    
    do shell script (sh as text) 
    

    конец повтора

1 Ответ

0 голосов
/ 05 мая 2018

Чтобы получить URL-адреса всех изображений от элементов с классом image_stack__image (при условии, что элементы этого класса являются <img> элементами, и для обслуживания нескольких изображений, которые все имеют это имя класса), эта строка JavaScript вернет массив из src значений атрибутов:

Array.from(document.querySelectorAll('.image_stack__image'), e=>e.src)

AppleScript автоматически преобразует это в список при использовании команды do JavaScript в Safari .

Для cURL всех URL-адресов в каталоге "thumbnails" в вашей домашней папке и сохраните каждое изображение под тем же именем, что и в удаленном файле, сначала cd в каталоге, затем cURL с помощью --remote-name-all опция:

cd ~/thumbnails; curl --remote-name-all %url1% %url2% ...

Предупреждение: Возможно, не загружаются изображения с необычными URL-адресами, например, изображения, которые генерируются динамически с помощью запроса CGI, или изображения, атрибут которых src содержит данные в кодировке base64. Фактически, их наличие в запросе curl может потенциально нарушить весь запрос.

Чтобы объединить список URL-адресов, возвращаемых методом JavaScript, чтобы вы могли вставить его прямо в cURL, просто приведите список AppleScript в text, используя space в качестве разделителя:

    set JS to "Array.from(document.querySelectorAll('.image_stack__image'), e=>e.src);"
    set sh to {"cd ~/thumbnails;", "curl --remote-name-all"}

    set the text item delimiters to space

    tell application "Safari" to tell ¬
        the front document to set ¬
        the end of sh to ¬
        do JavaScript JS

    do shell script (sh as text)

Затем повторите один и тот же процесс для каждого URL-адреса веб-страницы, заключив соответствующие строки кода в цикл repeat:

    set allURLs to {%your list of URLs%}
    set JS to "Array.from(document.querySelectorAll('.image_stack__image'),e=>e.src);"
    set sh to {"cd ~/thumbnails;", "curl --remote-name-all", {}}

    set the text item delimiters to space

    tell application "Safari" to repeat with www in allURLs
        set D to (make new document with properties {URL:www})

        # Wait until webpage has loaded
        tell D to repeat until not (exists)
            delay 0.5
        end repeat

        set the last item of sh to do JavaScript JS in the front document

        close the front document

        do shell script (sh as text)
    end repeat

Это скелет. Вам нужно будет заняться обработкой ошибок в ситуациях, когда URL-адреса имеют необычный формат или если веб-страница не загружается и т. Д., Но теперь у вас есть все инструменты для выполнения запрошенных вами шагов.

Кроме того, я рекомендую прочитать справочную страницу для curl (введите man curl в Terminal ), прочитать о параметре --remote-name-all и найти множество других вариантов, которые могут оказаться полезными.

Но я сделаю все возможное, чтобы помочь с любыми незначительными дорожными ударами, с которыми вы столкнулись, или вопросами, связанными с тем, что я написал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...