¿Hay alguna manera de activar una pestaña particular de Chrome a través de bash?

10

Supongamos, por ejemplo, que tengo una ventana de Chrome activa con gmail abierto en algún lugar entre sus pestañas (pero no necesariamente la pestaña activa).

Pregunta: ¿Hay alguna forma de activar la pestaña de gmail desde la línea de comandos?

DD131
fuente

Respuestas:

5

El siguiente script funciona para mí, pero requiere que solo tenga una ventana de Chrome y que esa ventana esté activa. Debería ser fácil modificarlo o mejorarlo.

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

Probablemente hay muchas otras formas de hacer esto:

  • Usando Chromium y modifica su código fuente
  • Escribir una extensión para Chrome que cambie a la pestaña derecha cuando se cumpla una determinada condición
  • Usando herramientas como xmacro
  • Etc.
usuario2718996
fuente
Nota: xwininfoaceptará un decimal $WINID.
meuh
La solución necesita código para evitar el bucle infinito cuando la pestaña de Gmail no está abierta.
Gonki
1

Si. Actualmente lo hago así:

1) , deberás instalar jq para jugar con los datos de pestañas que recibirás cuando invoques el script que activará las pestañas abiertas actualmente en Chrome.


2) Chrome debe ejecutarse con la depuración remota activada. cierre todas las instancias de chromium y ejecute este comando en lugar de solo chromiumen la terminal; de lo contrario, este proceso no funcionará:

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


3) use este script, guárdelo como "act" chmod +xy colóquelo en el directorio bin de su usuario:

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

navegue a cnn.com y un par de otras pestañas y mantenga cnn.com en segundo plano, cambie a terminal y pruebe el comando de la siguiente manera:

act cnn

debería activar la ventana de cromo y cambiar a la pestaña cnn. déjame saber si eso funciona!

Danny Z
fuente
0

En Linux (Debian) yo uso google-chrome URL(ejemplo:) google-chrome google.com. Se abriría una nueva pestaña.

Escriba google-chrome --helppara una descripción más detallada.


Encontré esto para mac (pero no lo intenté): chrome-cli open <url> -ncomando.

Depende de https://github.com/prasmussen/chrome-cli

Enrique René
fuente
0

Este código Perl funciona para mí: por ejemplo, findTab.pl Chrome Gmail. Hace que la pantalla se voltee un montón y puede cambiar las pestañas en otras ventanas (comprueba 12 veces la teoría de que esto debería dejar su ventana en la pestaña original si no encuentra nada, siempre que tenga <5 pestañas en el ventana).

No funciona en mi sistema Ubuntu si no lo usa windowactivateantes key; algo que ver con protocolos de seguridad muy antiguos.

No creo que haya ninguna garantía de lo que encontrará si hay más de una cosa para encontrar; Sospecho que, según otra experiencia de xdotool, es probable que encuentre cosas diferentes cuando se usa repetidamente.

perl probablemente no sea una buena opción para este script, pero no sé 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
fuente
0

Bueno, mi pestaña de Gmail está anclada y se queda primero. Este pequeño guion me ayuda

#!/bin/bash                                                                                                              

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

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

Funciona en mi entorno i3wm.

usuario1278890
fuente