有没有一种方法可以通过bash激活chrome的特定标签?


11

例如,假设我有一个chrome窗口处于活动状态,而gmail在其选项卡中的某个位置(但不一定是活动选项卡)中打开了。

问题:有没有办法从命令行激活gmail标签

Answers:


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之类的工具
  • 等等。

注意:xwininfo将接受小数$WINID
2015年

该解决方案需要代码以防止在Gmail标签未打开时发生无限循环。
Gonki

2

是。我目前这样做:

1),您需要安装jq来处理在调用将激活Chrome中当前打开的选项卡的脚本时将得到的选项卡数据。您还需要安装chrome-remote-interface


2) 铬需要在远程调试打开的情况下运行。关闭所有铬实例,然后运行此命令,而不是仅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选项卡。让我知道是否可行!



0

这个perl代码对我有用:例如,findTab.pl Chrome Gmail。它会使屏幕翻转一堆,并且可以更改其他窗口中的选项卡(理论上,它检查了12次,即如果找不到任何内容,只要您在窗口中没有<5个选项卡,就应该将窗口保留在原始选项卡上窗口)。

如果您windowactivate以前不使用过key,它将无法在我的Ubuntu系统上使用;与非常古老的安全协议有关。

我认为,如果有不止一件事情,就无法保证会找到什么。根据其他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环境。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.