7
votes

Obtenez la source de l'onglet Courant dans Google Chrome via Appscript

C'est le jeu d'enfant de le faire dans Safari, qui a un bon soutien AppleScript. Le soutien de Google Chrome vient d'arriver, alors je leur donne le bénéfice du doute. J'essaie essentiellement d'attraper le HTML actuel via le presse-papiers afin que je puisse obtenir des informations. Nous avons des commandes nifty comme ceci: xxx

mais hélas vous ne pouvez pas dire " définir x sur la source de l'onglet actif de la fenêtre 1 ". Personne n'a de suggestions pour moi? Mes idées actuelles sont de charger le code dont j'ai besoin dans l'arrière-plan de Safari (assez laid) ou d'essayer d'afficher la source et de l'attraper avec un script UI, mais c'est aussi laid. Aussi, je continue à rencontrer des bogues de script qui le maintiennent de fonctionner.

Toute aide serait appréciée.


1 commentaires

Attendez, Chrome a le support AppleScript maintenant? Quand est-ce arrivé? Impressionnant!


6 Réponses :


-2
votes

Voir comment Chrome comme support de Chrome a "vient d'arriver" il est tenu d'être "passionnant" à utiliser. En essayant certains des commandements qu'ils ont disponibles dans leur dictionnaire, il semble qu'ils ont toujours des kinks à travailler. Jusqu'à ce que Google expose une solution dans l'API pour obtenir le code source plus facilement (et / ou fonctionner dans les kinks associés), vous devrez utiliser l'une des alternatives que vous mentionnez dans votre message.


1 commentaires

(J'ai un script qui frappe la commande `encore et encore jusqu'à ce que l'onglet en question se déplace, mais c'est lent et vraiment inélégant.)



2
votes

Je suis très excité d'apprendre que Chrome a maintenant un support AppleScript. Il est regrettable que cela soit encore minime, mais je suis sûr que (j'espère!) Ça va aller mieux. Comme il n'ya aucun moyen d'obtenir la source directement, je choisirais la route piraquine suivante: xxx

Oui, c'est piraté, mais c'est inévitable, compte tenu de l'état actuel du dictionnaire de script. Le script doit être simple: ouvrez une onglet Source, attendez qu'il charge, sélectionnez le contenu, copiez-le et fermez l'onglet. Vous pouvez jouer avec le Delay 3 s pour voir ce qui fonctionne mieux. Notez que le premier Onglet actif de la fenêtre 1 est arbitraire, le reste se réfère explicitement à l'onglet Source. également, apparemment, il n'y a aucun moyen de fermer un onglet du dictionnaire de script de Chrome (Oy vey), alors je devais utiliser JavaScript à la place. aussi, le dernier Delay 1 > ne devrait-il pas être nécessaire, mais si ce n'était pas là, mes tests retournaient parfois la mauvaise chose, même si le contenu du presse-papiers était correct quand je les ai collées. Je pense que c'est parce qu'il y avait suffisamment de texte Il a fallu une quantité de temps notable pour mettre à jour le presse-papiers.

EDIT 1: I remplacé Exécutez l'onglet Actif de la fenêtre 1 JavaScript "window.close ()" < / Code> Avec l'onglet Supprimer la ligne , comme on lui a été suggéré. Malheureusement, Supprimer l'onglet Onglet Active de la fenêtre 1 ne fonctionne pas, vous avez donc besoin de cette construction légèrement plus compliquée.


4 commentaires

Vous pouvez utiliser Supprimer l'onglet 3 . Le problème est l'architecture multi-processus, le HTML se trouve dans le rendu WHERAS Le code AppleScript est exécuté dans le processus de navigateur.


@ user265260: ooh, sympa. Merci! Je vais éditer cela dans ma réponse. En outre, juste hors de curiosité, pourquoi cette caractéristique de Chrome a-t-elle causé des problèmes? (Si vous connaissez la réponse.)


onglet Tell (l'onglet Active Index de la fenêtre 1) de la fenêtre 1 à supprimer devrait le faire. La chose est une onglet actif renvoie un objet d'onglet Type, Fermer n'est pas pris en charge dans l'onglet car il n'a aucun moyen de savoir quelle fenêtre il appartient (c'est la bonne façon car les onglets peuvent modifier leurs fenêtres).


Réponse courte: Comme je l'ai dit, le HTML vit dans Renderer, une manière possible consiste à évoquer la chaîne à l'aide de la CIB, mais il existe d'autres problèmes qui se présentent à la suite de cela.



2
votes
tell application "Google Chrome"
    set t to active tab index of window 1
    tell active tab of window 1 to view source
    set t to t + 1
    repeat while (loading of tab t of window 1)
    end repeat
    tell tab t of window 1 to select all
    tell tab t of window 1 to copy selection
    delete tab t of window 1
end tell

2 commentaires

Merci, c'est utile. Toujours faire des bris de l'interface utilisateur lourde, mais parce qu'il y a de petits bugs (des choses qui ne fonctionnent pas encore dans Google Chrome), c'est difficile. Une seule question que j'ai est, j'ai besoin d'ouvrir un onglet, d'obtenir des données de la page principale (c'est une URL bit.ly), puis fermez l'onglet montrant l'onglet Original. Pour quelque chose de la raison du script d'interface utilisateur, il veut revenir à un endroit étrange, la fin des onglets que je pense. Comment puis-je dire l'onglet de rachat 154 de la fenêtre 1 de devenir actif?


Information "Google Chrome" Set Onglet Active Index de la fenêtre 1 à / * Tout ce que vous voulez * / End Tell



6
votes

Depuis Google Chrome prend en charge JavaScript

--Applescript code
tell active tab of window 1
    set sourcehtml to execute javascript
    document.getElementsByTagName('html')[0].innerHTML
end tell


1 commentaires

Cela me donne Erreur de syntaxe Fin de ligne attendue mais des biens trouvés.



4
votes

La bibliothèque App AppleScript de Chrome peut Exécuter JavaScript.

Ceci assignera la source complète de la page à source et renvoyer-le xxx


0 commentaires

0
votes

La réponse simple est la suivante:

tell application "Google Chrome"
    activate
    tell active tab of window 1
        set sourcehtml to execute javascript "document.getElementsByTagName('html')[0].innerHTML"
        return sourcehtml
    end tell
end tell


0 commentaires