AppleScript वेब सफारी में वर्तमान सफारी विंडो को बचाने के लिए?


8

जीयूआई स्क्रिप्टिंग का उपयोग किए बिना , मैं वेब ब्राउजर प्रारूप में वर्तमान ब्राउज़र पेज को एक फ़ाइल में सहेजने के लिए सफारी को बताने के लिए AppleScript का उपयोग कैसे कर सकता हूं ? निम्नलिखित एक त्रुटि उत्पन्न करता है "The document “...” could not be exported as “foo.webarchive”(जहां "..." वर्तमान वेब पेज का शीर्षक है, जो कुछ भी हो सकता है):

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

मैंने इस पर बदलाव करने की कोशिश की है, जैसे कि अलग फ़ाइल नाम एक्सटेंशन (जैसे, .html) यह देखने के लिए कि कुछ भी काम करता है, लेकिन एक त्रुटि हमेशा उत्पन्न होती है। मैंने फ़ाइल नाम को निर्दिष्ट करने के विभिन्न तरीकों की कोशिश की है, लेकिन यह भी त्रुटियों का निर्माण करता है (एक अलग तरह का)। मैंने ऊपर दिए save ... as ".webarchive"गए सरल के बजाय का उपयोग करने की कोशिश की है save, लेकिन यह "दस्तावेज़ 1 के बारे में एक अलग त्रुटि पैदा करता है जो संदेश को नहीं समझता है"।

Safari 11 के लिए AppleScript डिक्शनरी में यह विवरण है:

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.

इसका तात्पर्य यह है कि सफ़ारी द्वारा समझे गए विशिष्ट प्रारूप में वर्तमान वेब पेज को सहेजना संभव होना चाहिए (जैसे कि, उम्मीद के मुताबिक, वेबआर्काइव), और यह कि मैंने अभी सही वाक्य रचना नहीं किया है।


यदि आप यूआई स्क्रिप्टिंग के माध्यम से एक और रास्ता नहीं खोज सकते हैं, तो इसका एक अच्छा उदाहरण है। AppleScript: सफारी - वेब आर्काइव के रूप में सहेजें
user3439894

@ user3439894 धन्यवाद। दुर्भाग्य से, मैं एक अधिक जटिल वर्कफ़्लो को स्वचालित करने की कोशिश कर रहा हूं, और चीजों को नियंत्रित करने की आवश्यकता है जैसे कि यह फ़ाइल कहां लिखती है। सफारी के लिए AppleScript डिक्शनरी का अर्थ है कि save" प्रारूप के रूप में " तर्क को स्वीकार करना चाहिए , इसलिए मैं उम्मीद करता हूं कि यह वास्तव में काम कर सकता है और मैंने अभी सही वाक्यविन्यास का पता नहीं लगाया है।
मुहका

क्या आपने बदलाव की कोशिश की है जैसे "webarchive"और "Web Archive"?
बॉलपॉइंटबैन

@ बॉलपॉइंटबेन हाँ; जैसे ही मैं जोड़ता हूं as "formatname"(जो भी "स्वरूपनाम" मैं कोशिश करता हूं), AppleScript संपादक रिपोर्ट करता है error "Safari got an error: document 1 doesn’t understand the “save” message." number -1708 from document 1
मुहका

1
मुझे लगता है कि सफारी के AppleScript saveकमांड टूट गया है। मैंने एक नंगे की कोशिश की save document 1। हालांकि इसने सेव डायलॉग बॉक्स को लाया, यह .webarchive के बजाय डॉक्यूमेंट के नाम पर। भले ही बॉक्स के नीचे प्रारूप विकल्प "वेब आर्काइव" था। फिर जब मैंने सेव मारा, तो मुझे "निर्यात नहीं किया जा सका" और त्रुटि कोड 10000 (Apple इवेंट हैंडलर विफल) की समान त्रुटि मिली। इसके अलावा, स्क्रिप्ट चलाने के बाद, डायलॉग बॉक्स में फॉर्मेट ड्रॉपडाउन मेनू गायब हो गया
ब्रूस

जवाबों:


3

मैंने एक बंडल स्क्रिप्ट बनाई है जो वेब टैब के रूप में डेस्कटॉप पर वर्तमान टैब को सहेजती है। क्रेडिट करने के लिए newzealandpaul उसके लिए webarchiver शेल कमांड को चलाने वाली इस स्क्रिप्ट। आप अपनी विशिष्ट आवश्यकताओं को पूरा करने के लिए कोड को ट्विक कर सकते हैं, लेकिन ऐसा करना चाहिए कि आपके प्रश्न में वह कोड क्या करने की कोशिश कर रहा है।

यहाँ बंडल स्क्रिप्ट है: SaveWebarchive

इस के साथ काम करता webarchiver बंडल आदेश;

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"

ध्यान दें कि डाउनलोड की गई स्क्रिप्ट में पूरी विंडो पर लॉग दिखाने वाला स्क्रिप्ट एडिटर इंटरफ़ेस हो सकता है।


इसलिए मैं स्रोत कोड डाउनलोड करता हूं webarchiverऔर इसे बनाने के लिए जाता हूं और पाता हूं कि मैंने इसे सितंबर में पहले ही कर लिया था। मैं स्रोत कोड को पढ़ना पसंद करता हूं और जब मैं वास्तव में स्रोत को नहीं जानता हूं तो निष्पादन योग्य बनाम एक पूर्व-निर्मित निष्पादन योग्य का निर्माण करना पसंद करता हूं। वैसे भी, मुझे ओपी I को saveकमांड का उपयोग करने पर ध्यान केंद्रित करने के बाद पढ़ना स्वीकार करना होगा और इसके बारे में भूल गया था webarchiver। यह वास्तव में अच्छा काम करता है और जब तक यह मेरा सवाल नहीं है मैं अभी भी उत्तर के लिए एक +1 दूंगा!
user3439894

मैं समझता हूँ कि आप इसे स्वयं संकलित करना चाहेंगे! बस .commandफ़ाइल के अंत में जोड़ना सुनिश्चित करें और इसे उसी स्थान पर रखें जो मैंने प्रदान किया था।
जाके 3231

जब तक webarchiverनिष्पादन योग्य के रूप में सेट नहीं किया जाता है तब तक इसे वास्तव में .command एक्सटेंशन की आवश्यकता नहीं होनी चाहिए । AppleScript में इसका परीक्षण नहीं किया गया है क्योंकि मैंने इसे सेप्ट में टर्मिनल से वापस बैश स्क्रिप्ट में उपयोग किया है webarchiverऔर मुझे पता है कि यह अच्छा काम करता है।
user3439894

ठीक है। अगर वह आपके लिए काम करता है, तो यह बहुत अच्छा लगता है! मैंने उस बंडल स्क्रिप्ट का परीक्षण किया है जिसे मैंने शामिल किया है, लेकिन अगर आप webarchiverऔर भी बेहतर तरीके से उपयोग कर सकते हैं तो मुझे यह सुनना अच्छा लगेगा कि आप इसे कैसे करते हैं!
जेक 3231

यह प्रति विशेष कुछ भी नहीं था, मेरे पास बस एक फ़ाइल में URL का एक गुच्छा था और इसका उपयोग लेखक GitHub परियोजना पृष्ठ पर उदाहरण के रूप में किया गया था webarchiver -url http://www.google.com -output google.webarchive, लेकिन स्क्रिप्ट को पढ़ी गई फ़ाइल के माध्यम से लूप किए जाने पर कमांड को टोकन दिया जाता है यूआरएल। बस वास्तव में बुनियादी सामान। मैं यह सब भूल गया था जब तक आप अपने प्रश्न का उत्तर muck के प्रश्न पर पोस्ट नहीं करते।
user3439894
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.