AppleScript para salvar a janela atual do Safari em formato webarquivo?

8

Sem usar o script da GUI , como posso usar o AppleScript para dizer ao Safari para salvar a página atual do navegador em um arquivo no formato webarquivo? A seguir, "The document “...” could not be exported as “foo.webarchive”ocorre um erro (onde "..." é o título da página da Web atual, seja ela qual for):

set the_filepath to "/tmp/foo.webarchive"
tell application "Safari"
    activate
    save document 1 in the_filepath
end tell

Eu tentei variações sobre isso, como diferentes extensões de nome de arquivo (por exemplo, .html) para ver se alguma coisa funciona, mas sempre surge um erro. Eu tentei maneiras diferentes de especificar o nome do arquivo, mas isso também produz erros (de um tipo diferente). Eu tentei usar em save ... as ".webarchive"vez do simples saveacima, mas isso produz um erro diferente sobre "o documento 1 não entende a mensagem salva".

O dicionário AppleScript para Safari 11 tem esta descrição:

savev : Save a document.
  save specifier : The document(s) or window(s) to save.
    [in file] : The file in which to save the document.
    [as saveable file format] : The file format to use.

Isso implica que deve ser possível salvar a página da web atual em um formato específico entendido pelo Safari (como, esperançosamente, arquivador da web), e que eu simplesmente não entendi a sintaxe correta.

mhucka
fonte
Se você não conseguir encontrar uma maneira diferente por meio do script de interface do usuário, aqui está um bom exemplo disso. AppleScript: Safari - Salvar como arquivo da Web
user3439894
@ user3439894 Obrigado. Infelizmente, estou tentando automatizar um fluxo de trabalho mais complicado e preciso controlar coisas como onde ele grava o arquivo. O dicionário AppleScript para Safari implica que savedeve aceitar um argumento "como formato ", por isso espero que realmente funcione e que simplesmente não tenha descoberto a sintaxe correta.
mhucka
Você já tentou variações como "webarchive"e "Web Archive"?
precisa
@BallpointBen Sim; assim que adiciono as "formatname"(qualquer que seja o "nome do formato" que tento), o AppleScript Editor relata error "Safari got an error: document 1 doesn’t understand the “save” message." number -1708 from document 1.
mhucka
11
Eu acho que o savecomando AppleScript do Safari está quebrado. Eu tentei uma nua save document 1. Embora tenha aberto a caixa de diálogo Salvar, anexou .css ao nome do documento em vez de .webarchive. Mesmo que a opção de formato na parte inferior da caixa seja "Arquivo da Web". Em seguida, ao pressionar Salvar, recebi o mesmo erro de "não foi possível exportar" e o código de erro 10000 (Falha no manipulador de eventos da Apple). Além disso, depois de executar o script, o menu suspenso Formato na caixa de diálogo Salvar desapareceu
Bruce

Respostas:

3

Eu criei um script em pacote que salva a guia atual na área de trabalho como um arquivo da web. Agradecemos a newzealandpaul por seu comando shell do webarchiver que alimenta esse script. Você pode ajustar o código para atender às suas necessidades específicas, mas isso deve fazer o que esse código na sua pergunta está tentando fazer.

Aqui está o script incluído: SaveWebarchive

Isso funciona com o comando webarchiver incluído;

set fileName to "foo"

tell application "Safari" to set targetURL to (URL of document 1) as string
set commandPath to POSIX path of (path to resource "webarchiver.command")
do shell script "" & commandPath & " -url " & targetURL & " -output ~/Desktop/" & fileName & ".webarchive"

Observe que o script baixado pode ter a interface do Editor de scripts mostrando o log na janela inteira.

Jake3231
fonte
Então, eu baixo o código-fonte webarchivere o construo e descobri que já havia feito isso antes em setembro. Prefiro ler o código-fonte e criar o executável versus um executável pré-criado quando realmente não conheço a fonte. De qualquer forma, tenho que admitir que, depois de ler o OP, concentrei-me no uso do savecomando e esqueci webarchiver. Funciona muito bem e, embora não seja minha pergunta, ainda darei um +1 para a resposta!
user3439894
Entendo que você gostaria de compilar você mesmo! Apenas certifique-se de adicionar .commandao final do arquivo e colocá-lo no mesmo local que eu forneci.
Jake3231
Na verdade, ele não precisa da extensão .com, desde que webarchiverseja definida como executável. Não testei no AppleScript porque o usei em setembro no Terminal em um script do bash, exatamente como webarchiveré assim que sei que funciona bem.
user3439894
OK. Se isso funciona para você, então parece ótimo! Eu testei o script incluído, mas se você puder usar webarchiverde uma maneira ainda melhor, eu adoraria saber como você faz isso!
Jake3231
Não era nada de especial em si, eu tinha apenas um monte de URLs em um arquivo e usei como no exemplo na página de projeto do GitHub dos autores, por exemplo webarchiver -url http://www.google.com -output google.webarchive, mas tokenizei o comando para que, quando o script leu o arquivo que percorreu o arquivo URLs. Apenas coisas realmente básicas. Eu tinha esquecido tudo até você postar sua resposta à pergunta de Muck.
user3439894