有没有办法通过 bash 激活特定的 chrome 标签?

DD1*_*131 15 scripting chrome

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

问题:有没有办法从命令行激活gmail 选项卡

Dan*_*y Z 7

是的。我目前这样做:

1)您需要安装jq来处理在调用当前打开的 Chrome 选项卡的脚本时会得到的选项卡数据。您还需要安装chrome-remote-interface来完成从背景 - > 铬的前景激活选项卡的工作。


2) chrome 需要在开启远程调试的情况下运行。关闭所有 Chromium 实例,并运行此命令而不是仅chromium在终端中运行,否则此过程将不起作用:

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


3)以此基础脚本为例,将其另存为act,chmod +x并将其放置在您用户的 bin 目录中。例如,我使用 bash 脚本,如果您是 zsh 用户,则可以移植它:

#!/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
Run Code Online (Sandbox Code Playgroud)

导航到 cnn.com 和其他几个选项卡并将 cnn.com 保留在后台,切换到终端并尝试如下命令:

act cnn
Run Code Online (Sandbox Code Playgroud)

它应该激活铬窗口并切换到 cnn 选项卡。您可以自由地将其与工作流程中的 rofi 菜单或 fzf 变体进一步集成,甚至将打开的选项卡列表放入活动窗口的全局池中。


小智 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
Run Code Online (Sandbox Code Playgroud)

可能还有很多其他方法可以做到这一点:

  • 使用 Chromium 并修改其源代码
  • 为 Chrome 编写一个扩展程序,当满足特定条件时会切换到正确的选项卡
  • 使用像 xmacro 这样的工具
  • 等等。

  • 注意:“xwininfo”将接受十进制“$WINID”。 (2认同)