AppleScript, um eine Registerkarte anhand ihres Namens in Google Chrome zu finden

Ich habe vergessen, wie man eine Registerkarte anhand ihres Namens findet und den Wert zurückgibt (z. B. Registerkarte 2) und die Registerkarte schließlich auch als aktive Registerkarte festlegt.

Ich habe folgendes versucht, aber es funktioniert nicht:

set titleString to "
"

tell application "Google Chrome"
    set window_list to every window # get the windows

    repeat with the_window in window_list # for every window
        set tab_list to every tab in the_window # get the tabs

        repeat with the_tab in tab_list # for every tab
            set the_title to the title of the_tab # grab the title
            if the_tab contains (Name to search" as text) then
                display notification "the_tab"
            end if
             return # concatenate
        end repeat
    end repeat
end tell

Ich habe auch versucht, etwas mit JavaScript zu starten:

tell application "Google Chrome"
    set window_list to every window
    repeat with the_window in window_list
        set tab_list to every tab in the_window
        tell tab_list to set TheTab to execute javascript "document.title"
    end repeat
end tell

Aber dann bekomme ich:

{«Klasse CrTb» ID 4 von Fenster-ID 1 der Anwendung "Google Chrome", «Klasse CrTb» ID 9 von Fenster-ID 1 der Anwendung "Google Chrome", «Klasse CrTb» ID 2 von Fenster-ID 1 der Anwendung "Google Chrome ", «class CrTb» id 189 of window id 1 of application "Google Chrome"} versteht die "Execute"-Meldung nicht.

Wie kann ich vorgehen?

Antworten (2)

Da Sie sich nicht sicher sind, wie umfassend das ist, was Sie erreichen möchten, ist der folgende Code möglicherweise mehr als Sie benötigen. Es ermöglicht jedoch die Suche nach dem Namen der Registerkarte und legt dann die Registerkarte, die die Suchzeichenfolge enthält, als active tab.

Der folgende Code ist eine Überarbeitung des Codes, der in Find Safari Tabs with AppleScript präsentiert wird . Es wäre schön gewesen, zu wechseln zu können tell application "Safari"und tell application "Google Chrome"das Skript funktionierte, aber aufgrund der Unterschiede in den Eigenschaften eines Tabs zwischen den beiden Apps würde das nicht funktionieren.

Was dieses Skript macht:

  • Zeigt ein Dialogfeld an, in dem Sie eingeben, wonach in den Namen der Registerkarten gesucht werden soll.
  • Wenn die Suchzeichenfolge nur in einem Tab gefunden wird, wird dieser Tab auf gesetzt active tab index, was bedeutet, dass Tab jetzt der aktuelle Tab ist. Wenn mehr als ein Fenster vorhanden ist, wird das Fenster mit diesem Tab vor allen anderen Google Chrome-Fenstern nach vorne gebracht.
  • Wenn die Suchzeichenfolge mehrere Übereinstimmungen ergibt, wird ein Listendialog zur Auswahl angezeigt, dann wird diese Registerkarte auf gesetzt active tab index, was bedeutet, dass die Registerkarte jetzt die aktuelle Registerkarte ist. Wenn mehr als ein Fenster vorhanden ist, wird das Fenster mit diesem Tab vor allen anderen Google Chrome-Fenstern nach vorne gebracht.
  • Wenn die Suchzeichenfolge nicht übereinstimmt, wird ein Dialogfeld mit der Meldung "Keine Übereinstimmung gefunden!" wird angezeigt.

set searchString to text returned of (display dialog "Enter a string to search for:" default answer "" with title "Find Google Chrome Tab")

tell application "Google Chrome"
    set win_List to every window
    set win_MatchList to {}
    set tab_MatchList to {}
    set tab_NameMatchList to {}
    repeat with win in win_List
        set tab_list to every tab of win
        repeat with t in tab_list
            if searchString is in (title of t as string) then
                set end of win_MatchList to win
                set end of tab_MatchList to t
                set end of tab_NameMatchList to (id of win as string) & ".  " & (title of t as string)
            end if
        end repeat
    end repeat
    if (count of tab_MatchList) is equal to 1 then
        set w to item 1 of win_MatchList
        set index of w to 1
        my setActiveTabIndex(t, searchString)
    else if (count of tab_MatchList) is equal to 0 then
        display dialog "No match was found!" buttons {"OK"} default button 1
    else
        set which_Tab to choose from list of tab_NameMatchList with prompt "The following Tabs matched, please select one:"
        if which_Tab is not equal to false then
            set oldDelims to (get AppleScript's text item delimiters)
            set AppleScript's text item delimiters to "."
            set tmp to text items of (which_Tab as string)
            set w to (item 1 of tmp) as integer
            set AppleScript's text item delimiters to oldDelims
            set index of window id w to 1
            my setActiveTabIndex(t, searchString)
        end if
    end if
end tell

on setActiveTabIndex(t, searchString)
    tell application "Google Chrome"
        set i to 0
        repeat with t in tabs of front window
            set i to i + 1
            if title of t contains searchString then
                set active tab index of front window to i
                return
            end if
        end repeat
    end tell
end setActiveTabIndex
@KevinCork, ich habe zwei zusätzliche Codezeilen hinzugefügt AppleScript's text item delimiters, um den vorherigen Zustand zu berücksichtigen und ihn zurückzusetzen, nachdem ich ihn geändert habe, um das zu erhalten, was window idaus dem list Dialogfeld zurückgegeben wird . In diesem speziellen Fall wäre es wirklich nicht wichtig gewesen, diesen Code nur in einem bestimmten Skript zu verwenden. Es wird jedoch als bessere Programmierpraxis angesehen, dies beim Ändern einer Standardeinstellung zu tun.
Dies ist sehr praktisch, eine letzte Frage, wenn der Tab gefunden wird, wie kann ich den aktiven Tab-Index für die spätere Verwendung speichern (mit einer anderen Skriptzeile?). Zum Beispiel verwende ich "Tell Application "Google Chrome" Tell Tab 3 von Fenster 1, um VariableOfTheTextFound so einzustellen, dass Javascript "document.getElementsByClassName('field simple-field align')[0].innerHTML;" ausgeführt wird, kann ich "Tab 3 von Fenster 1" durch den vorherigen Index ersetzen?

Die Frage ist drei Jahre alt, aber ich nehme an, dass andere ihren Weg hierher finden können, so wie ich es getan habe, also ist meine Antwort hier an Sie gerichtet, die Person, die derzeit darüber nachdenkt, wie dies zu tun ist:

Ist es Ihr Ziel, dies manuell oder programmgesteuert zu tun? Benötigen Sie eine Codelösung, die Sie in eine Automatisierung einfügen können, die Sie erstellen, oder ist dies Ihre erste Annahme, wie Sie Ihr UI-Ziel erreichen können, indem Sie in der Lage sein, die gewünschte Registerkarte zu finden, während Sie interaktiv arbeiten?

Wenn Sie später nur einen von 54 Tabs finden müssen, die auf 11 Fenster in 7 Desktop-Bereichen verteilt sind, dann empfehle ich die Chrome-Erweiterung "Tabs".https://chrome.google.com/webstore/detail/tabs/cdbepibloojgbmnofbejfgglmdlifadj

Die Quelle für diese kostenlose Erweiterung befindet sich auf GitHub. Wenn Sie in Chrome auf das Symbol klicken, wird ein Popup geöffnet, das alle geöffneten Registerkarten nach Fenster auflistet und den Fokus auf ein Suchfeld legt, sodass Sie sofort eine Suchzeichenfolge eingeben können. Während Sie tippen, werden die Ergebnisse eingegrenzt. Wenn Sie den gesuchten Registerkartennamen sehen, klicken Sie darauf und Sie gehen sofort dorthin, egal in welchem ​​Desktopbereich und Fenster.

Ich benutze "Tabs" mehrmals am Tag.