Есть ли способ активировать определенную вкладку Chrome через Bash?

11

Предположим, например, у меня есть активное окно Chrome с Gmail, открытым где-то среди его вкладок (но не обязательно активной вкладкой).

Вопрос: есть ли способ активировать вкладку gmail из командной строки?

DD131
источник

Ответы:

6

Следующий скрипт работает для меня, но он требует, чтобы у вас было только одно окно Chrome, и это окно должно быть активным. Это должно быть легко настроить или улучшить.

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

Вероятно, есть много других способов сделать это:

  • Использование Chromium и изменение его исходного кода
  • Написание расширения для Chrome, которое переключалось бы на правую вкладку при выполнении определенного условия
  • Использование таких инструментов, как xmacro
  • И т.п.
user2718996
источник
Примечание: xwininfoпримете десятичную $WINID.
Меу
Решению необходим код для предотвращения бесконечного цикла, когда вкладка Gmail не открыта.
Гонки
2

Да. В настоящее время я делаю это так:

1) , вам нужно установить jq, чтобы возиться с данными вкладок, которые вы получите при вызове скрипта, который активирует открытые в настоящее время вкладки в chromium. также вам нужно будет установить chrome-remote-interface


2) хром должен работать с включенной удаленной отладкой. закройте все экземпляры chromium и запустите эту команду вместо chromiumтерминала, иначе этот процесс не будет работать:

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


3) используйте этот скрипт, сохраните его как «act» chmod +xи поместите в каталог bin вашего пользователя:

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

перейдите на cnn.com и несколько других вкладок и держите cnn.com в фоновом режиме, переключитесь на терминал и попробуйте команду следующим образом:

act cnn

он должен активировать окно хрома и переключиться на вкладку cnn. дай мне знать, если это работает!

Дэнни Z
источник
0

В Linux (Debian) я использую google-chrome URL(пример:) google-chrome google.com. Новая вкладка будет открыта.

Тип google-chrome --helpдля более подробного описания.


Я нашел это для Mac (но не пытался): chrome-cli open <url> -nкоманда.

Это зависит от https://github.com/prasmussen/chrome-cli

Энрике Рене
источник
0

Это Perl код работает для меня: например, findTab.pl Chrome Gmail. Он заставляет экран переворачиваться и может менять вкладки в других окнах (он 12 раз проверяет теорию, что это должно оставить ваше окно на исходной вкладке, если он ничего не найдет, если у вас <5 вкладок в окно).

Это не работает в моей системе Ubuntu, если вы не используете windowactivateраньше key; что-то делать с очень старыми протоколами безопасности.

Я не думаю, что есть какая-то гарантия, что он найдет, если найдется больше чем одна вещь; Я подозреваю, основываясь на другом опыте xdotool, что он может найти разные вещи при повторном использовании.

Perl, вероятно, не очень хороший выбор для этого скрипта, но я не знаю 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;
}
Джонатан Душофф
источник
0

Ну, моя вкладка Gmail закреплена и остается первой. Этот маленький сценарий помогает мне

#!/bin/bash                                                                                                              

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

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

Это работает в моей среде i3wm.

user1278890
источник