Gibt es eine Möglichkeit, einen bestimmten Chrom-Tab per Bash zu aktivieren?

10

Angenommen, ich habe beispielsweise ein Chrome-Fenster aktiv, in dem Google Mail irgendwo zwischen den Registerkarten geöffnet ist (aber nicht unbedingt die aktive Registerkarte).

Frage: Gibt es eine Möglichkeit, die Registerkarte "Google Mail" über die Befehlszeile zu aktivieren ?

DD131
quelle

Antworten:

5

Das folgende Skript funktioniert für mich, aber es erfordert , dass Sie nur ein Chrome - Fenster haben, und das Fenster aktiv zu sein. Es sollte einfach sein, es zu optimieren oder zu verbessern.

WINID=$(xdotool search --name 'Google Chrome' | head -n 1)
WINID_HEX=$(printf "0x%x" $WINID)

while true
do
        xwininfo -id $WINID_HEX | grep Gmail
        if [ "$?" -ne 0 ]
        then
                xdotool key --window $WINID ctrl+Tab
        else
                break
        fi
        sleep 2
done

Es gibt wahrscheinlich viele andere Möglichkeiten, dies zu tun:

  • Verwenden Sie Chromium und ändern Sie den Quellcode
  • Schreiben einer Erweiterung für Chrome, die zur rechten Registerkarte wechselt, wenn eine bestimmte Bedingung erfüllt ist
  • Mit Tools wie xmacro
  • Usw.
user2718996
quelle
Hinweis: xwininfoAkzeptiert eine Dezimalstelle $WINID.
Meuh
Die Lösung benötigt Code, um eine Endlosschleife zu verhindern, wenn die Registerkarte "Google Mail" nicht geöffnet ist.
Gonki
1

Ja. Ich mache es momentan so:

1) Sie müssen jq installieren , um mit den Tab-Daten herumzuspielen , die Sie beim Aufrufen des Skripts erhalten, das derzeit geöffnete Tabs in Chrom aktiviert.


2) Chrom muss mit aktiviertem Remote-Debugging ausgeführt werden. Schließen Sie alle Chrom-Instanzen und führen Sie diesen Befehl aus, anstatt nur chromiumim Terminal. Andernfalls funktioniert dieser Prozess nicht:

/usr/bin/chromium --remote-debugging-port=9222 &


3) Verwenden Sie dieses Skript, speichern Sie es als "act" chmod +xund legen Sie es im bin-Verzeichnis Ihres Benutzers ab:

#!/usr/bin/env bash

TABS_JSON=$(chrome-remote-interface list | sed -e "s/^'//" -e "s/'$//" | jq -r 'map(select(.type == "page") | {id: .id, title: .title})')

if [[ -z $@ ]]; then
    TAB_NAMES=$(echo "$TABS_JSON" | jq -r 'map(.title) | .[]')

    echo "$TAB_NAMES"
else
    TAB=$*

    TAB_ID=$(echo "$TABS_JSON" | jq -r "map(select(.title | match(\"${TAB}\";\"i\")) | .id) | .[]")

        chrome-remote-interface activate "$TAB_ID" >/dev/null

    #you might need wmctrl if window does not activate. 
    #wmctrl -a chromium
fi

Navigieren Sie zu cnn.com und einigen anderen Registerkarten und lassen Sie cnn.com im Hintergrund, wechseln Sie zum Terminal und probieren Sie den Befehl wie folgt aus:

act cnn

Es sollte das Chromfenster aktivieren und zur Registerkarte cnn wechseln. Lass es mich wissen, wenn das funktioniert!

Danny Z.
quelle
0

Unter Linux (Debian) verwende ich google-chrome URL(Beispiel :) google-chrome google.com. Ein neuer Tab wäre geöffnet.

Geben Sie google-chrome --helpfür eine detailliertere Beschreibung ein.


Ich habe dies für Mac gefunden (aber nicht versucht): chrome-cli open <url> -nBefehl.

Dies hängt von https://github.com/prasmussen/chrome-cli ab

Enrique René
quelle
0

Dieser Perl-Code funktioniert für mich: z findTab.pl Chrome Gmail. Dadurch wird der Bildschirm umgedreht und es können Registerkarten in anderen Fenstern geändert werden (es wird 12 Mal überprüft, ob Ihr Fenster auf der ursprünglichen Registerkarte verbleiben soll, wenn nichts gefunden wird, solange Sie <5 Registerkarten in der Registerkarte haben Fenster).

Es funktioniert nicht auf meinem Ubuntu-System, wenn Sie es windowactivatevorher nicht verwenden key. etwas mit sehr alten Sicherheitsprotokollen zu tun.

Ich glaube nicht, dass es eine Garantie dafür gibt, was es finden wird, wenn es mehr als eine Sache zu finden gibt. Ich vermute aufgrund anderer xdotool-Erfahrungen, dass es bei wiederholter Verwendung wahrscheinlich andere Dinge findet.

Perl ist wahrscheinlich keine gute Wahl für dieses Skript, aber ich weiß nicht, Bash.

#! /usr/bin/perl
## findTab.pl
## usage findTab appName tabName
use strict;

my $maxTabs=12;

my ($app, $tab) = @ARGV;

my @wins = split /\s+/, `xdotool search --desktop 0 --name $app`;

foreach my $win (@wins){
    my $title;
    for (my $i=0;$i<$maxTabs;$i++){
        system ("xdotool windowactivate $win");
        $title = `xwininfo -id $win | grep $tab`;
        last if $title;
        system("xdotool key --window $win ctrl+Page_Down");
    }
    last if $title;
}
Jonathan Dushoff
quelle
0

Nun, mein Google Mail-Tab ist angeheftet und bleibt an erster Stelle. Dieses kleine Skript hilft mir

#!/bin/bash                                                                                                              

wmctrl -a $1                                                                                                             
xdotool search --onlyvisible --class $1 key Alt+1

./activate_mail.sh Chromium
./activate_mail.sh Firefox

Es funktioniert in meiner i3wm-Umgebung.

user1278890
quelle