Existe-t-il un moyen d'activer un onglet particulier de Chrome via bash?

11

Supposons, par exemple, qu'une fenêtre chrome soit active avec gmail ouvert quelque part parmi ses onglets (mais pas nécessairement l'onglet actif).

Question: Existe - t-il un moyen d'activer l' onglet gmail à partir de la ligne de commande?

DD131
la source

Réponses:

6

Le script suivant fonctionne pour moi, mais il nécessite que vous n'ayez qu'une seule fenêtre Chrome et que cette fenêtre soit active. Il devrait être facile de le modifier ou de l'améliorer.

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

Il existe probablement de nombreuses autres façons de procéder:

  • Utiliser Chromium et modifier son code source
  • Écrire une extension pour Chrome qui basculerait vers l'onglet de droite lorsqu'une certaine condition est remplie
  • Utiliser des outils comme xmacro
  • Etc.
user2718996
la source
Remarque: xwininfoacceptera une décimale $WINID.
meuh
La solution a besoin de code pour empêcher une boucle infinie lorsque l'onglet Gmail n'est pas ouvert.
Gonki
2

Oui. Je le fais actuellement comme ceci:

1) , vous devrez installer jq pour jouer avec les données d'onglet que vous obtiendrez lorsque vous invoquerez le script qui activera les onglets actuellement ouverts en chrome. vous devrez également installer chrome-remote-interface


2) le chrome doit être exécuté avec le débogage à distance activé. fermez toutes les instances de chrome et exécutez cette commande au lieu de simplement chromiumdans le terminal, sinon ce processus ne fonctionnera pas:

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


3) utilisez ce script, enregistrez-le comme "act", chmod +xet placez-le dans le répertoire bin de votre utilisateur:

#!/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

accédez à cnn.com et à quelques autres onglets et gardez cnn.com en arrière-plan, passez au terminal et essayez la commande comme suit:

act cnn

il devrait activer la fenêtre de chrome et passer à l'onglet cnn. faites-moi savoir si cela fonctionne!

Danny Z
la source
0

Sous linux (Debian) j'utilise google-chrome URL(exemple:) google-chrome google.com. Un nouvel onglet serait ouvert.

Tapez google-chrome --helppour une description plus détaillée.


J'ai trouvé ceci pour mac (mais je n'ai pas essayé): chrome-cli open <url> -ncommande.

Cela dépend de https://github.com/prasmussen/chrome-cli

Enrique René
la source
0

Ce code perl fonctionne pour moi: par exemple findTab.pl Chrome Gmail. Il fait basculer l'écran un tas et peut changer d'onglet dans d'autres fenêtres (il vérifie 12 fois la théorie selon laquelle cela devrait laisser votre fenêtre sur l'onglet d'origine s'il ne trouve rien, tant que vous avez <5 onglets dans le fenêtre).

Cela ne fonctionne pas sur mon système Ubuntu si vous ne l'utilisez pas windowactivateauparavant key; quelque chose à voir avec des protocoles de sécurité très anciens.

Je ne pense pas qu'il y ait une garantie de ce qu'il trouvera s'il y a plus d'une chose à trouver; Je soupçonne, sur la base d'autres expériences de xdotool, qu'il est susceptible de trouver différentes choses lorsqu'il est utilisé à plusieurs reprises.

perl n'est probablement pas un bon choix pour ce script, mais je ne sais pas 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
la source
0

Eh bien, mon onglet gmail est épinglé et reste le premier. Ce petit script m'aide

#!/bin/bash                                                                                                              

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

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

Cela fonctionne sur mon environnement i3wm.

user1278890
la source