我必须启动多个浏览器(数千个),但不想每次启动浏览器时都打开一个新窗口;相反,我需要打开网页,处理内容并转到下一个。
从终端运行 Chrome(不一定是 Chrome)时:
$ google-chrome URL
网页在实际浏览器的新窗口中打开:
Created new window in existing browser session.
有什么办法可以在实际的窗口上运行它,而不是打开新的窗口?
或者:有没有办法在启动下一个浏览器会话之前终止当前创建的浏览器会话?如果浏览器最初关闭,如何获取刚刚创建的新会话的 pid?
答案1
有效地,你想要的是在窗口中打开一个新的 url,而不关闭当前窗口手动(如果我理解得没错的话),也不必手动关闭标签。
基本解决方案
解决方案可能是运行一个结合两件事的命令:
- 使用 url 作为参数从命令行打开一个新窗口
- 自动关闭当前窗口
这样,浏览器的 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
用您的 URL 填充文件,每行一个:
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
添加到快捷键
为了真正让它舒适,请将其添加到快捷键组合中:系统设置>“快捷键”>“自定义快捷键”
答案2
我有一个替代解决方案的想法:你可以检查一下
ps -ef | grep chrome
正在运行的 chrome 会话的进程号。使用
kill [进程号]
您可以终止该进程。希望它对您有用。