Ce forum est en partie financé par l’affichage de publicités. Merci de désactiver votre bloqueur de publicités pour nous permettre de continuer à fournir ce service.

question Appelscript : gérer ouverture/fermeture de liens

Discussion dans 'Développement Mac' créé par Wiks, 4 Décembre 2008.

  1. Wiks

    Wiks Membre junior

    Inscrit:
    22 Mai 2007
    Messages:
    26
    J'aime reçus:
    0
    Bonjour,

    J'ai quelques questions sur Applescript auxquelles je ne trouve pas de réponses:

    - Comment dit-on de fermer la fenêtre (de safari en l'occurrence) mais la bonne fenêtre, celle qui a été ouverte par le processus par exemple et non celle que j'ouvre entre temps; car quand je fait close window 1 cela ferme celle qui est au premier plan, sans réfléchir à ce qui est effectivement au premier plan à ce moment la, vous comprenez?

    - Comment ouvire un lien de façon à ce qu'il s'ouvre dans la même fenêtre qu'un lien précédant et non dans une nouvelle fenêtre.

    - J'ai également besoin de savoir si l'on peux ouvrir une fenêtre en la dimensionnent comme on veut, la réduire, ou même l'ouvrir sans l'affiché mais réduite dans le dock.

    si quelqu'un peux maider, merci :)
     
  2. Wiks

    Wiks Membre junior

    Inscrit:
    22 Mai 2007
    Messages:
    26
    J'aime reçus:
    0
    S'il vous plait, juste comment ou "sélectionne une fenêtre" pour la fermer si vous savez.
     
  3. zacromatafalgar

    zacromatafalgar Membre émérite

    Inscrit:
    19 Mai 2004
    Messages:
    878
    J'aime reçus:
    81
    Tu peux utiliser le nom de la fenêtre à fermer plutôt que window 1, donc à l'ouverture de la fenêtre par le processus, tu fais un :
    Code (Text):
    set theName to name of window
    puis, au moment de la fermeture tu mets
    Code (Text):
    close window theName

    Code (Text):
    set URL of document 1 to "http://www.theAddress.com"

    Oui c'est possible :
    Code (Text):
    tell application "Safari"
        do JavaScript "self.moveTo(0,0);self.resizeTo(800,500)" in document 1
    end tell
    Pour ce qui est de la réduction dans le Dock, aucune idée…
    ;)
     
  4. Wiks

    Wiks Membre junior

    Inscrit:
    22 Mai 2007
    Messages:
    26
    J'aime reçus:
    0
    Meeeerci beacoup! :up:
     
  5. zacromatafalgar

    zacromatafalgar Membre émérite

    Inscrit:
    19 Mai 2004
    Messages:
    878
    J'aime reçus:
    81
    Finalement pour la miniaturisation de la fenêtre il suffit de :

    Code (Text):
    tell application "Safari"
        set miniaturized of window 1 to true
    end tell
    ;)
     
  6. Wiks

    Wiks Membre junior

    Inscrit:
    22 Mai 2007
    Messages:
    26
    J'aime reçus:
    0
    Merci :)

    Sinon savez vous comment on fait pour chercher puis utiliser des liens d'une page web?
    Automator a une tel fonction mais j'aimerais le faire en Applescript.

    sie vous êtes toujours la, merci : )

    Wiks
     
  7. zacromatafalgar

    zacromatafalgar Membre émérite

    Inscrit:
    19 Mai 2004
    Messages:
    878
    J'aime reçus:
    81
    Il faut récupérer le code source de la page puis isoler les liens, liens qui ont la caractéristique de tous débuter par href="http://

    Je t'ai fait un code avec quelques commentaires :

    Code (Text):
    set linksList to {}

    tell application "Safari"
        set theURL to URL of front document --récupération de l'url qui pourra nous servir pus tard si on veut les liens vers d'autres éléments du site
        set URLsource to source of front document --récupère le code source de la page
    end tell

    set AppleScript's text item delimiters to "href=\"http://" --on choisi un séparateur qui va nous permettre de repérer le début de chaque lien vers un autre site

    set theItems to text items of URLsource
    --À ce stade, les "liens", qui ne sont pas encore isolés correctement, débutent par www et se terminent juste avant le début du lien suivant. La prochaine boucle va permettre de localiser la véritable fin du lien

    repeat with anItem in theItems
        set AppleScript's text item delimiters to "\"" --pour trouver l'endroit où se termine le lien (guillemet)
        set linkOk to text item 1 of anItem
        if linkOk starts with "www" then
            set end of linksList to linkOk --on met les liens dans une liste
        end if
    end repeat
    set AppleScript's text item delimiters to "" --on remet le séparateur par défaut

    tell application "Safari"
        repeat with aLink in linksList --boucle d'ouverture des liens dans un nouvel onglet
            my newTab()
            set the URL of document 1 to "http://" & aLink
        end repeat
    end tell

    on newTab() --fonction de création des onglets
        tell application "Safari" to activate
        tell application "System Events"
            tell process "Safari"
                click menu item "Nouvel onglet" of menu "Fichier" of menu bar 1
            end tell
        end tell
    end newTab
    ;)
     
  8. Wiks

    Wiks Membre junior

    Inscrit:
    22 Mai 2007
    Messages:
    26
    J'aime reçus:
    0
    waw, merci. J'ai regarder un ce code. Je ne suis pas un pro du html mais je trouve un petit probleme dans ce code, comme s'il ne pouvait pas ouvir tout ce que je veux, par exemple dans le code source j'ai remarqué qu'il y a plein de liens après le "hrep..." qui ne commence pas par www donc ca ne les voi pas meme si on peu cliquer dessus sur les sites.

    par exemple, sur :

    http://trad.applescript.free.fr/applescript.html

    ton code n'ouvre pas le lien AS4AS_Fr.pdf (la traduction francaise du guide applescript),
    l'adresse de ce lien est : http://trad.applescript.free.fr/guides/AS4AS_Fr.pdf
    pourtant dans le code source on a juste href="guides/AS4AS_Fr.pdf" et non pas l'addresse entiere.
    Ton code ne le voi pas avec if linkOk starts with "www" donc c'est embetant.


    Sinon pourquoi y a t il un antislache dans href=\"http:// ?

    ligne : set AppleScript's text item delimiters to "href=\"http://"
     
  9. zacromatafalgar

    zacromatafalgar Membre émérite

    Inscrit:
    19 Mai 2004
    Messages:
    878
    J'aime reçus:
    81
    C'est bien pour ce type de lien que l'on récupère l'adresse du site en 3ème ligne, mais ne sachant si tu voulais les prendre en compte, je les ai laissés de coté.

    Code (Text):
    set theURL to URL of front document --récupération de l'url qui pourra nous servir pus tard si on veut les liens vers d'autres éléments du site
    L'antislash échappe le caractère le suivant, dans ce cas un guillemet, s'il ne l'était pas il provoquerait une erreur à la compilation…
     
  10. zacromatafalgar

    zacromatafalgar Membre émérite

    Inscrit:
    19 Mai 2004
    Messages:
    878
    J'aime reçus:
    81
    Le code ci-dessous te convient-il ?

    Code (Text):
    set linksList to {}

    tell application "Safari"
        set theURL to URL of front document --récupération de l'url qui pourra nous servir pus tard si on veut les liens vers d'autres éléments du site
        set URLsource to source of front document --récupère le code source de la page
    end tell

    set AppleScript's text item delimiters to "href=\""
    set theItems to text items of URLsource

    set AppleScript's text item delimiters to "/"
    set partOk to (text items 1 thru -2 of theURL) as text
    set AppleScript's text item delimiters to ""

    repeat with anItem in theItems
        set AppleScript's text item delimiters to "\"" --pour trouver l'endroit où se termine le lien (guillemet)
        set linkOk to text item 1 of anItem
        if linkOk starts with "http://" then
            set end of linksList to linkOk --on met les liens dans une liste
        else if (linkOk does not end with "css") and (linkOk does not start with "<!") and (linkOk does not contain "mailto") then
            set end of linksList to (partOk & "/" & linkOk) as text
        end if
    end repeat
    set AppleScript's text item delimiters to "" --on remet le séparateur par défaut

    tell application "Safari"
        repeat with aLink in linksList --boucle d'ouverture des liens dans un nouvel onglet
            my newTab()
            set the URL of document 1 to aLink
        end repeat
    end tell

    on newTab() --fonction de création des onglets
        tell application "Safari" to activate
        tell application "System Events"
            tell process "Safari"
                click menu item "Nouvel onglet" of menu "Fichier" of menu bar 1
            end tell
        end tell
    end newTab
     
  11. Wiks

    Wiks Membre junior

    Inscrit:
    22 Mai 2007
    Messages:
    26
    J'aime reçus:
    0
    A oui c'est mieux comme ca :). Donc ce code ouvre tout les liens clicables sure une page c'est bien ca?

    Maintenent reste à bien comprendre le script : )

    Pourquoi donc les conditions if (linkOk does not end with "css") and (linkOk does not start with "<!") and (linkOk does not contain "mailto") ?

    je ne comprend pas très bien comment on utilise le séparateur :rose: mais ca à l'air assez puissant; et puis les ligne du genre (text items 1 thru -2 of theURL) ou set linkOk to text item 1 of anItem.

    Aussi remarque :
    Cette fonction newTab() serait bien intéressante mais quand j'éxécute :
    Erreur d'Applescript
    Erreur dans System Events : NSReceiverEvaluationScriptError: 4, pourquoi ?:confused:

    A part cela c'est super top cool, merci zacromatafalgar :)

    pour tester le code j'ai donc remplacé ca par des simples open location.

    Ma question aussi : peut on récupéré le code source d'une page sans l'ouvrire, car j'aimerais récupérer le code de plusieures dizaines de pages, et j'ai envie de devoir les ouvrir. Si on ai obliger, alors un moyen intéressant serait d'attendre la fin de l'ouverture de la page avant de copier le liens, un dilay ne serait pas assez précis; ben oui sinon il met rien dans

    set URLsource to source of front document

    en disant que URLsource n'est pas définit
     
  12. zacromatafalgar

    zacromatafalgar Membre émérite

    Inscrit:
    19 Mai 2004
    Messages:
    878
    J'aime reçus:
    81
    Oui


    Le premier pour ne pas ouvrir le fichier css si la page en a un d'indiquer dans les meta, le second pour ne pas considérer le premier bout de texte comme un lien (<! correspond au début du code source) et enfin le troisième qui permet de ne pas tenir compte des éventuels liens de contact qui ouvrent Mail, ce qui provoquerait une erreur en tentant de l'ouvrir avec le navigateur…


    Pour les séparateurs, je te renvoie vers cette page de iScript.fr, pour (text items 1 thru -2 of theURL), on utilise le slash comme séparateur et donc si on a http://www.leSite/index.html comme adresse du site, "text item 1" correspond au premier morceau soit "http:" jusqu'au morceau -2 (-1 est le dernier morceau, -2 l'avant dernier…). On supprime donc "index.html" pour le remplacer plus tard par les liens internes aux sites et on obtiendra bien des adresses complètes. Je ne sais pas si c'est bien clair, la pédagogie n'est pas mon fort…


    Coche la case "Activer l'accès pour les périphériques d'aide" des préférences système Accès universel et ceci ne sera plus qu'un souvenir…

    Non je ne pense pas, en tout cas je ne sais pas faire.
    Voici le code que j'utilise pour attendre le chargement de la page :
    Code (Text):
    set theURL to "http://www.macg.co/"
    set sourceOk to 0
    open location theURL
    tell application "Safari"
        make new document
        set the URL of the front document to theURL
        repeat until sourceOk = 1
            set theSource to source of front document as string
            if theSource contains "</html>" then set sourceOk to 1
        end repeat
    end tell
     
  13. Wiks

    Wiks Membre junior

    Inscrit:
    22 Mai 2007
    Messages:
    26
    J'aime reçus:
    0
    merci zacromatafalgar, ton aide m'a été très précieuse est utile. Je suis par la suite tombé sur des liens qui était mis dans un code source comme
    <a href=view.php?ad=188 target=_blank style="text-decoration:none; color: #787878;"</a>

    Donc je me suis débrouillé pour trouver car en remplacent "href=\"" par "href="
    et "\"" par un espace " " et ca marche :) par contre ca ne marche pas pour les autres liens plus normaux du coup, donc j'ai le code en double... avec une condition if le_code_source contains "href=view" pour choisir le bon code, c'est peut être pas la meilleures solution. Est-ce que je peut m'attendre à rencontrer encore d'autre configurations que
    href="http://lesite/...lelien..."
    href="lelien"
    href=lelien
    ?

    Aussi :
    j'ai un problème avec :

    set theName to name of window

    il me fait une erreur Impossible d’obtenir name of window :nailbiting:

    Et puis une question importante :
    Une fois qu'on ai fait un beaux script Applescript, quel est le moyen le plus simple de faire fonctionner sur windows pour fait profiter les collegues? y'a t il moyen de "lire" ce code sous windows ou peut etre le retranscrire avec un langage comparable?

    merci :zen:
     
  14. zacromatafalgar

    zacromatafalgar Membre émérite

    Inscrit:
    19 Mai 2004
    Messages:
    878
    J'aime reçus:
    81
    Je ne saurais te dire, désolé…


    Essaie plutôt avec :
    Code (Text):
    set theName to name of front window
    Il n'y a, à ma connaissance, aucun moyen de faire fonctionner un applescript sur windows…
     
  15. BS0D

    BS0D Membre d’élite
    Club MacG

    Inscrit:
    27 Juillet 2008
    Messages:
    2 320
    J'aime reçus:
    530
    salut à tous,

    quelques questions sur safari.
    déjà il est bon de signaler que je n'en suis pas du tout fan, car il manque d'options à mon gout. firefox par exemple, efface mon historique après fermeture automatiquement. firefox permet l'utilisation de foxyproxy et autres plugins qui sont très bien supportés.
    tout ça manque un peu à safari, mais la V4 est très "prometteuse", donc je voudrais m'y mettre.

    je me suis dit que je compléterais les options manquantes avec applescript, les actions automator étant peu nombreuses et bien inutiles à mon goût si je puis me permettre.
    donc, questions concernant le scripting de safari:

    -est il possible de faire en sorte qu'il soit dès l'ouverture en navigation privée (il n'y a meme pas de raccourci pour ça, c'est vraiment con).
    -est il possible d'en vider le cache et l'historique à la fermeture?

    le cas échéant, je vais me contenter de reprendre mon firefox et attendre la sortie de la prochaine version avec impatience...
     
  16. tatouille

    tatouille Vétéran

    Inscrit:
    1 Juin 2004
    Messages:
    5 174
    J'aime reçus:
    494
    je viens juste de tester,
    il y a une valeur dans le plist grep "private" com.apple.safari.plist dans textwrangler

    Code (Text):

    defaults write com.apple.safari  WebKitPrivateBrowsingEnabled -bool yes
     
    mais quand tu demarres Safari celui-ci ecrit cette valeur a no par default
    et la change quand tu selectionnes le menu item

    Code (Text):

        <key>WebDatabaseDirectory</key>
        <string>~/Library/Safari/Databases</string>
        <key>WebIconDatabaseDirectoryDefaultsKey</key>
        <string>~/Library/Safari</string>
        <key>WebIconDatabaseImportDirectoryDefaultsKey</key>
     
    cela peut te permettre d'effacer les fichiers, mais rien de tres pratique
    dans le dictionaire

    mais peut etre il existe de l'existant :) je suis pas un applescript man

    mais bon tu pourrais ecrire ton webbrowser base sur le WebKit et l'appeler SafariX :D
     
Chargement...

iOccasion - Achetez un produit Apple d'occasion

refurb Apple