Existe uma maneira de ativar uma guia específica do chrome via bash?

10

Suponha, por exemplo, que eu tenha uma janela do Chrome ativa com o Gmail aberta em algum lugar entre suas guias (mas não necessariamente a guia ativa).

Pergunta: Existe uma maneira de ativar a guia gmail na linha de comando?

DD131
fonte

Respostas:

5

O script a seguir funciona para mim, mas exige que você tenha apenas uma janela do Chrome e essa janela esteja ativa. Deve ser fácil ajustá-lo ou melhorá-lo.

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

Provavelmente existem muitas outras maneiras de fazer isso:

  • Usando o Chromium e modifique seu código-fonte
  • Escrever uma extensão para o Chrome que mudaria para a guia direita quando uma determinada condição fosse atendida
  • Usando ferramentas como xmacro
  • Etc.
user2718996
fonte
Nota: xwininfoaceitará um decimal $WINID.
meuh
A solução precisa de código para evitar loop infinito quando a guia Gmail não está aberta.
Gonki 4/09/19
1

Sim. Atualmente, faço assim:

1) , você precisará instalar o jq para mexer com os dados da guia que serão alimentados ao chamar o script que ativará as guias abertas no momento no chromium.


2) o cromo precisa estar em execução com a depuração remota ativada. feche todas as instâncias do chromium e execute este comando em vez de apenas chromiumno terminal, caso contrário, esse processo não funcionará:

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


3) use este script e salve-o como "act", chmod +xe coloque-o no diretório bin do usuário:

#!/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 até cnn.com e algumas outras guias e mantenha o cnn.com em segundo plano, alterne para terminal e tente o comando da seguinte maneira:

act cnn

deve ativar a janela do cromo e mudar para a guia cnn. deixe-me saber se isso funciona!

Danny Z
fonte
0

No Linux (Debian) eu uso google-chrome URL(exemplo google-chrome google.com:). Uma nova guia seria aberta.

Digite google-chrome --helppara uma descrição mais detalhada.


Encontrei isso para o chrome-cli open <url> -ncomando mac (mas não tentei):.

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

Enrique René
fonte
0

Este código perl funciona para mim: por exemplo findTab.pl Chrome Gmail,. Isso faz com que a tela vire um monte e mude de guia em outras janelas (verifica 12 vezes a teoria de que isso deve deixar sua janela na guia original se não encontrar nada, desde que você tenha <5 guias na janela).

Não funciona no meu sistema Ubuntu se você não o usa windowactivateantes key; algo a ver com protocolos de segurança muito antigos.

Não acho que haja garantia sobre o que encontrar, se houver mais de uma coisa a encontrar; Suspeito, com base em outra experiência do xdotool, que é provável que encontre coisas diferentes quando usado repetidamente.

O perl provavelmente não é uma boa escolha para esse script, mas não sei o 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
fonte
0

Bem, minha guia do Gmail está afixada e permanece em primeiro lugar. Este pequeno script me ajuda

#!/bin/bash                                                                                                              

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

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

Funciona no meu ambiente i3wm.

user1278890
fonte