Загрузить файл через Safari с AppleScript - PullRequest
3 голосов
/ 02 сентября 2011

По причинам, по которым я не буду вдаваться в подробности, мне нужно написать что-то в AppleScript, которое будет загружать некоторые файлы специально через Safari.(Просто что-то, что кто-то дважды щелкнет, чтобы запустить, что откроет Safari и покажет им веб-страницу, инициируя некоторые загрузки.) Я могу установить URL-адрес документа с помощью AppleScript, но это не загружает файл.Safari считает, что это файл, который он понимает, поэтому он просто пытается открыть его напрямую.Мне нужно, чтобы файл был загружен в файловую систему.

Все, что я нахожу в Google, упоминает что-то, называемое «Сценарии URL-доступа», но когда я использую это, редактор AppleScript просит меня выбрать, какое это приложение, которое яне похоже (или не знаю, где это).Другие предложения заключаются в том, чтобы вызвать инструменты командной строки для загрузки файла, но проблема здесь, очевидно, заключается в том, что у пользователя есть некоторые файлы cookie в Safari, которые авторизуют их для ресурса сервера, поэтому инструменты командной строки просто получат ошибку.

Итак, я предполагаю, что вопрос разбивается на:

  1. Как мне tell application "Safari" загрузить файл?
  2. Могу ли я указать, где он сохраняет файл?Или он может идти только в папку Downloads?
  3. В качестве альтернативы, можно ли настроить Safari, чтобы он не пытался открывать определенные типы файлов, чтобы, возможно, я просто просматривал URL-адреса файлов в документе перед отображением страницы?

Ответы [ 3 ]

3 голосов
/ 02 сентября 2011

AppleScript сам по себе не может заставить Safari загружать файлы.
В настоящее время я могу представить две «счастливые» альтернативы:

1. Инициируйте загрузку с помощью JavaScript. (Google для фактического сценария.)

tell application "Safari"
    do JavaScript " alert('AppleScript successfully executed.');" in document 1
end tell

2. Откройте диспетчер загрузки Safari с помощью сценариев GUI и вставьте URL.
(Обязательно включите вспомогательные устройства.)

tell application "Finder" to set the clipboard to "http://www.google.nl/favicon.ico"
tell application "System Events"
    tell application "Safari" to activate
    keystroke "l" using {command down, option down}
    keystroke "v" using command down
end tell

AppleScript не может указать, где следует загружать определенные файлы,
однако он может изменить местоположение загрузки по умолчанию:
(Сделатьубедитесь, что путь существует, и перезапустите Safari.)

do shell script "defaults write com.apple.safari DownloadsPath -string \"/Users/Anne/Desktop\""

AppleScript действительно может отключить функцию «Открыть безопасные файлы после загрузки»:
(Обязательно перезапустите Safari.)

do shell script "defaults write com.apple.Safari AutoOpenSafeDownloads -boolean NO"

Safari теперь автоматически загружает файлы PDF.
К сожалению, изображения все еще отображаются.

Заключение

Сам AppleScript простоне может достичь ваших целей.

2 голосов
/ 02 сентября 2011

Я хотел бы проверить эту страницу .Приведенный здесь пример (ы) загружает все файлы PDF на странице;Вы можете адаптировать сценарии в соответствии с вашими потребностями ...

1 голос
/ 30 июля 2013

У меня случилась похожая проблема: мне нужно было загрузить много файлов PDF, и это должно было быть через браузер из-за файла cookie для входа в систему. Эта страница помогла мне встать на правильный путь. Вот сценарий пакетной загрузки с использованием метода вставки менеджера загрузки Anne. Он использует бесплатный satimage osax (http://www.satimage.fr/software/en/downloads/downloads_companion_osaxen.html) для поиска с регулярными выражениями и сортировки.

Обратите внимание, что при этом будет предпринята попытка сразу загрузить все соответствующие файлы на странице. Судя по моему ограниченному тестированию, Safari загружает 5 одновременно и ставит в очередь все остальное. Однако он может зависнуть, если файлов слишком много - завис при попытке вставить список из 3000 строк. Я не уверен в эффективном лимите.

Обратите внимание, что при этом файлы не будут загружаться, если страница не ссылается на них по именам файлов (например, по идентификатору файла), что особенно часто встречается на форумах.

## This script batch downloads all matching HREF links from the front Safari window.
## This script requires the Satimage scripting addition. Download it at http://www.satimage.fr/software/en/downloads/downloads_companion_osaxen.html
## Access for assitive devices must be enabled in the Accessibility (or Universal Access) control pane to function.


tell application "Safari"
    -- Settings
    set extension to {"pdf", "jpg", "png"} --set file extensions to download
    set preserve_clipboard to false -- This script sets the clipboard to a list of files to download. Set this varible to true to restore the current clipboard when it's finished.
    -- End Settings
    set safariversion to version
    set baseurl to find text "^(http(s)?://.*?)/" in (get URL of document 1) using "\\1" with regexp and string result --get base (root) URL e.g. http://www.example.com
    set relativebaseurl to find text "^(http(s)?://.*)/" in (get URL of document 1) with regexp and string result --get base for relative URLs (current directory) e.g. http://www.example.com/exa/mple/
    set cursource to get source of document 1 --grab source of current page

    set linklist to ""
    repeat with i from 1 to number of items of extension --check for links (href) for each extension.
        set searchresult to find text ("<a href=\"([^<>]*?\\." & item i of extension & ")") as string in cursource using "\\1" with all occurrences, regexp and string result --find all links matching file extension

        repeat with i from 1 to number of items in searchresult --prefix links with base URL if relative links
            if item i of searchresult does not start with "http" then --if a relative link
                if item i of searchresult begins with "/" then --if from root
                    set item i of searchresult to (baseurl & item i of searchresult) as string
                else --if from current directory (Safari should automatically correct "../" type links, tested in version 6.0.5)
                    set item i of searchresult to (relativebaseurl & item i of searchresult) as string
                end if
            end if
        end repeat

        set searchresult to sortlist searchresult with remove duplicates --remove duplicate entries from list.
        set AppleScript's text item delimiters to return
        if searchresult is not {} then set linklist to linklist & every item of searchresult & return as string
    end repeat

    if linklist is not "" then
        if preserve_clipboard is true then set original to the clipboard
        set the clipboard to linklist

        --use UI scripting to open download window and paste list to download. Access for assitive devices must be enabled in the Accessibility control pane to function.
        tell application "System Events"
            tell application "Safari" to activate
            tell process "Safari"
                if safariversion ≥ 6 then
                    if not (exists pop over 1 of button 3 of tool bar 1 of window 1) then keystroke "l" using {command down, option down} --if downloads pop over isn't active, then open it. (Safari 6)
                else
                    if not (exists window "Downloads") then --open downloads window if it's closed. (Safari 5 or below)
                        keystroke "l" using {command down, option down}
                    else --close then open downloads window to be sure it's in front and focused.
                        keystroke "l" using {command down, option down}
                        keystroke "l" using {command down, option down}
                    end if
                end if
                delay 0.5 --short delay to allow download window/pop over to open before pasting list.
                keystroke "v" using command down --paste list
                if preserve_clipboard is true then set the clipboard to original
            end tell

        end tell
    end if
end tell

Я сохранил его как приложение и использовал BetterTouchTool (с http://www.boastr.net), чтобы назначить его горячей клавише в Safari для удобной пакетной загрузки.

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