AppleScript: पूरी तरह से लोड करने के लिए Safari पेज की प्रतीक्षा करें


2

जब तक पेज पूरी तरह से लोड नहीं हो जाता, तब तक स्क्रिप्ट को रोकने के लिए मैं Google Chrome के लिए इस स्क्रिप्ट का उपयोग कर रहा हूं:

tell application "Google Chrome"
        repeat until (loading of front window's tab 2 is false)
            1 + 1 --just an arbitary line
        end repeat
        loading of front window's tab 2 
    end tell 

यह सफारी के साथ काम करने के लिए नहीं लगता है, किसी भी समकक्ष?

जवाबों:


5

1. AppleScript sourceसंपत्ति

आप सफारी की sourceसंपत्ति का उपयोग करने की कोशिश कर सकते हैं, जो ""तब तक है जब तक कि एचटीएमएल कोड इसमें लोड नहीं हो जाता है (जो पेज लोड होने के बाद ही किया जा सकता है)। हालाँकि, ध्यान दें कि यह जरूरी नहीं है कि पृष्ठ का प्रतिपादन किया गया है :

tell application "Safari"
     .
     .
    repeat while document 1's source = ""
        delay 0.5
    end repeat
     .
     .
end tell

sourceसंपत्ति पर रीसेट है ""भी पृष्ठ लोड / रीलोड के बीच।

2. Reload बटन UI तत्व

यदि आप जानना चाहते हैं कि कोई पृष्ठ स्क्रीन पर लोड और प्रस्तुत किया गया है, तो यह निर्धारित करने के लिए एक विश्वसनीय तरीका है कि क्या URL बार में बटन "पुनः लोड" बटन (लोड और रेंडर किया गया) या "रद्द करें" बटन है (पृष्ठ अभी भी लोड हो रहा है / प्रतिपादन:)

tell application "System Events" to repeat until exists (buttons of ¬
    UI elements of groups of toolbar 1 of window 1 of ¬
    process "Safari" whose name = "Reload this page")

    delay 0.5
end repeat

3. जावास्क्रिप्ट readyStateसंपत्ति

यदि आपके पास ऐप्पल ईवेंट से जावास्क्रिप्ट को डेवलप मेनू में टिक करने की अनुमति है , तो आप निम्न की readyStateसंपत्ति का उपयोग कर सकते हैं document:

tell application "Safari"
     .
     .
    tell document 1 to repeat
        do JavaScript "document.readyState"
        if the result = "complete" then exit repeat
        delay 0.5
    end repeat
     .
     .
end tell

document.readyStateजावास्क्रिप्ट संपत्ति पाँच में से एक मान देता है:

  • uninitialized: अभी तक लोडिंग शुरू नहीं की है
  • loading: लोड हो रहा है
  • loaded: लोड किया गया है
  • interactive: पर्याप्त लोड किया गया है और उपयोगकर्ता इसके साथ बातचीत कर सकता है
  • complete: पूरी तरह से भरी हुई

1

मैं वास्तव में जब तक पेज पूरी तरह से भरी हुई है प्रतीक्षा करने के लिए चाहते हैं, तो यहाँ एक ही रास्ता है कि मैं और अधिक विश्वसनीय तो अन्य तरीकों मैं के लिए मिल गया है हो पाया है सफारी :

उदाहरण AppleScript कोड :

tell application "Safari" to ¬
    make new document with properties ¬
        {URL:"https://apple.stackexchange.com/questions/343624/applescript-wait-for-page-fully-loaded"}

tell application "System Events" to tell process "Safari" to ¬
    set reload_button to a reference to ¬
        (first button whose name is "Reload this page") of ¬
        UI element 1 of groups of toolbar 1 of window 1

using terms from application "System Events"
    repeat until the accessibility description ¬
        of the reload_button ¬
        contains "Reload this page"
        delay 0.25    -- # Adjust value of delay as appropriate.
    end repeat
end using terms from

-- # Code to run after the page is completely loaded goes here:

AppleScript मदद के लिए CJK के जवाब से मेरे उपयोग के लिए अनुकूलित : लोड करने के लिए Safari पेज की प्रतीक्षा करें


नोट: उदाहरण AppleScript कोड बस यही है और इसमें कोई त्रुटि नहीं है, जो उचित हो। उपयोगकर्ता किसी भी त्रुटि से निपटने के लिए उचित, आवश्यक या वांछित हो सकता है, जोड़ने के लिए है। पर एक नज़र डालें कोशिश बयान और त्रुटि बयान में AppleScript भाषा गाइडत्रुटियों के साथ काम करना भी देखें ।


धन्यवाद, reload_button एक महान विचार लगता है, लेकिन मेरे मामले में मेरे पास वास्तविक टैब केंद्रित नहीं है, इसलिए मैंने आपके तैयार किए गए राज्य विकल्प का उपयोग किया "दोहराएं 20 बार बताएं आवेदन" सफारी "टैब 2 में जावास्क्रिप्ट" document.readyState "करें" की खिड़की 1 "
केविन

रीलोड बटन UI तत्व के बारे में, यह वास्तव में काम नहीं कर रहा है जबकि सफारी फुलस्क्रीन में है, क्या कोई काम है?
केविन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.