AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 554846
Accepted
nightcod3r
nightcod3r
Asked: 2014-11-30 22:58:07 +0800 CST2014-11-30 22:58:07 +0800 CST 2014-11-30 22:58:07 +0800 CST

在活动窗口上运行浏览器

  • 772

我必须使用多个浏览器(数千个),但不想每次启动浏览器时都打开一个新窗口;相反,我需要打开网页,处理内容并转到下一个。

从终端运行 Chrome(不一定是 Chrome)时:

$ google-chrome URL

该网页在实际浏览器的新窗口中打开:

Created new window in existing browser session.

有什么办法可以在实际的窗口上运行它,而不是打开一个新窗口?

或者:有没有办法在启动下一个浏览器会话之前终止当前创建的浏览器会话?如果浏览器最初关闭,我如何获取刚刚创建的新会话的 pid?

command-line
  • 2 2 个回答
  • 2076 Views

2 个回答

  • Voted
  1. Best Answer
    Jacob Vlijm
    2014-12-01T03:38:53+08:002014-12-01T03:38:53+08:00

    实际上,你想要的是在一个窗口中打开一个新的 url 而无需手动关闭当前窗口(如果我理解得很好),也不必手动关闭选项卡。

    基本解决方案

    解决方案可能是运行一个结合了两件事的命令:

    1. 使用 url 作为参数从命令行打开一个新窗口
    2. 自动关闭当前窗口

    这样浏览器的 pid 就不会改变,你也不必手动关闭选项卡和/或窗口。

    下面的小脚本正是这样做的,使用的是 firefox。使用 firefox 的原因是(例如)chrome 根据定义有多个 pid,使过程更加复杂。

    安装 wmctrl
    该脚本使用 wmctrl 查找和关闭当前的 firefox 窗口,您可能必须先安装它:

    sudo apt-get install wmctrl
    

    剧本

    #!/usr/bin/env python3
    
    import subprocess
    import socket
    import sys
    
    url =sys.argv[1]
    
    def get_info(command):
        return subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8").strip()
    
    def run_command(command):
        subprocess.call(["/bin/bash", "-c", command])
    
    currpid = get_info("pidof firefox")
    browserwindow = [l.split()[0] for l in get_info("wmctrl -l -p").splitlines() if currpid in l]
    run_command("firefox -new-window "+url)
    for i in browserwindow:
        run_command("wmctrl -ic "+i)
    

    如何使用

    将脚本复制到一个空文件中,将其另存为firejump.py. 打开一个 firefox 窗口(任意地址,只是一个窗口)并通过命令运行脚本:

    python3 /path/to/firejump.py <new_url>
    

    禁用警告以关闭当前窗口

    为了在没有烦人的 firefox 警告的情况下运行该过程,您正在关闭当前选项卡或窗口:通过在首选项中取消选中来禁用警告:

    在此处输入图像描述

    更高级的解决方案

    如果您真的需要跳过包含数千个url 的列表,稍微扩展脚本(请参阅下面的脚本)并让它自动跳转到您在文本中创建的列表中的下一个 url 可能会很有用文件,然后使用组合键运行脚本以跳转到下一个 url。

    如何使用

    • 将下面的脚本复制到一个空的 texfile 中,另存为jump_list.py
    • 在同一个文件夹中创建一个文本文件,命名为(准确):urls.txt
    • 用您的网址填充文件,每行一个:

      www.something.com
      www.another_thing.com
      www.yet_another_thing.nl
      www.itshardtostop.be
      

    等等

    打开一个 firefox 窗口(任何地址,只是一个窗口)。
    现在,当您运行脚本时,firefox 会打开第一个 url。
    再次运行它,它将跳转到下一个 url,依此类推,直到列表的最后一个 url 已通过。

    解释

    该脚本urls.txt按索引读取文件中的行。它跟踪脚本在脚本自己的目录中创建的文件中的(最后使用的)索引。每次脚本运行时,数字都会加一,直到到达最后一行。

    剧本

    #!/usr/bin/env python3
    
    import subprocess
    import os
    
    curr_path = os.path.dirname(os.path.abspath(__file__))
    
    def get_info(command):
        return subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8").strip()
    
    def run_command(command):
        subprocess.call(["/bin/bash", "-c", command])
    
    def write_totrack(file, next_url):
        with open(file, "wt") as wrt:
            wrt.write(next_url)
    
    def read_file(file):
        with open(file) as src:
            return src.read()
    
    keep_track = curr_path+"/"+"next_visit.txt"
    url_list = read_file(curr_path+"/"+"urls.txt").splitlines()
    
    if not os.path.exists(keep_track):
        next_url = "1"; index = 0
        write_totrack(keep_track, next_url)
    else:
        index = int(read_file(keep_track))
        next_url = index+1
        write_totrack(keep_track, str(next_url))
    if index < len(url_list):
        curr_url = url_list[index]
        currpid = get_info("pidof firefox")
        browserwindow = [l.split()[0] for l in get_info("wmctrl -l -p").splitlines() if currpid in l]
        run_command("firefox -new-window "+curr_url)
        for i in browserwindow:
            run_command("wmctrl -ic "+i)   
    else:
        pass
    

    通过以下方式运行脚本:

    python3 /path/to/jump_list.py
    

    将其添加到 $PATH

    更优雅的方法是将脚本保存到~/bin,使其可执行,删除语言扩展并通过命令运行它:

    jump_list
    

    添加到快捷键

    要真正让它舒适,请将其添加到快捷键组合:系统设置>“快捷键”>“自定义快捷键”

    • 1
  2. Erich
    2014-12-01T00:10:33+08:002014-12-01T00:10:33+08:00

    我有一个替代解决方案的想法:您可以查看

    ps-ef | grep 铬

    正在运行的 chrome 会话的进程号。和

    kill [进程号]

    你可以杀死这个过程。希望对你有效。

    • 0

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve