2017-07-23 2 views
0

J'ai une liste, et je veux que chaque élément de cette liste (numéro de commande) pour lancer une recherche, récupérer du texte de chrome et naviguer à travers un site web en utilisant ce numéro de commande.exécuter un sous-script pour chaque élément d'une liste sur AppleScript

J'ai déjà deux scripts (A et B)

Je pensais que je pouvais ajouter mon long scénario (B) à la première, à l'intérieur

repeat with theItem in theResult 
Script B 
end repeat 

mais cela ne fonctionne pas, je obtenir l'erreur

« propriété » prévue « fin » mais a trouvé

Script B, par exemple:

tell application "Google Chrome" 
    tell front window's active tab to set infoGrab to execute javascript "document.getElementsByClassName('even')[2].innerHTML;" 
end tell 

set theText to Unicode text 
set theSource to infoGrab 
property leftEdge72 : "<a href=\"/" 
property rightEdge72 : "\">" 
set saveTID to text item delimiters 
set text item delimiters to leftEdge72 
set classValue to text item 2 of theSource 
set text item delimiters to rightEdge72 
set uniqueIDKey to text item 1 of classValue 
set text item delimiters to saveTID 
uniqueIDKey 

et plus.

Je puis essayé de Enregistrer le script B dans un script indépendant et exécuter à partir du script A comme celui-ci

repeat with theItem in theResult 
    set the clipboard to theItem 
    set myScript to load script file ((path to desktop folder as text) & "SEARCH.scpt") 
    tell myScript 
    end tell 
    delay 30 
end repeat 

mais cela ne fonctionne pas non plus, le script B depuis ignorer toutes les répétition et le retard et il suffit d'exécuter Question: Comment puis-je faire d'autres actions pour chaque élément d'une liste, y compris le délimiteur de texte et plus encore. PS: désolé si mon poste est confus.

+0

Votre titre implique la réponse. Vous devez dire 'myScript' à ** exécuter ** – vadian

+0

Oui, c'est logique et ça fonctionne, merci! malheureusement pour moi le script est en train d'échouer après quelques secondes (mais pas de problème lorsqu'il est exécuté seul) –

Répondre

0

Je pense que votre script est erronée, car la variable "Script B" n'utilise pas "theitem" de la boucle de répétition . Ainsi, "Script B" retournera le même résultat pour chaque article.

Votre objectif n'est pas clair. Peut-être que si vous fournissiez plus de détails, avec des données d'exemples réels du HTML source et des résultats attendus, nous pourrions vous fournir une meilleure aide. IAC, pourquoi appelez-vous un script au lieu d'utiliser un gestionnaire? Voici vos scripts refacturés pour utiliser un gestionnaire, par exemple.

repeat with theItem in theResult 
    ## You don't seem to use "theItem" in the Script B ## 
    # if so, then the getID() handler will return the same results for all items in this loop 

    set myID to my getID() 
end repeat 

on getID() -- was Script B 
    -- put in same script file, or in script library 
    -- does this need to have a parameter? 

    tell application "Google Chrome" 
    tell front window's active tab to set infoGrab to execute javascript "document.getElementsByClassName('even')[2].innerHTML;" 
    end tell 

    set theText to Unicode text 
    set theSource to infoGrab 
    set leftEdge72 to "<a href=\"/" 
    set rightEdge72 to "\">" 

    set saveTID to text item delimiters 
    set text item delimiters to leftEdge72 
    set classValue to text item 2 of theSource 
    set text item delimiters to rightEdge72 
    set uniqueIDKey to text item 1 of classValue 
    set text item delimiters to saveTID 
    return uniqueIDKey 
end getID 
0

alias script d'exécution ((chemin de dossier de bureau sous forme de texte) & "SEARCH.scpt")