2025年10月11日土曜日

Webブラウザの開いているウィンドウ・タブを記録する (PC移行時のために)

PCを新しいものに移行しようとすると、Webブラウザで開いている多数のウィンドウやタブをどう移行するかで前回も悩んでました。ちなみに前回はWin7からWin10ですね。今回はWin10からWin11。

前回は無理矢理開いているものを新しい方にもっていくのをやってたんですが、そろそろ開いているタブやウィンドウにも重複が激しく、この際減らしたいわけです。。。そう、ガベージ・コレクションですね:-)。

主に使っているのがFirefoxとChromeなので、ちょいと探すと拡張機能でTab-Session-Managerなるものがあり、両ブラウザに対応していると。

これで、現在の開いているウィンドウのすべてのタブのタイトルとURLとか諸々を保存できます。保存したものはJSON形式です。

これを、HTMLでタイトルとURL(リンク)に変換して新しいPCのブラウザで開けばページ内検索でほしいものを探して、再び開くことができるだろうということで、えいやっとPython3で書いたのがこのプログラム。若人はこんな書き方をしてはいけません。プログラマは1週間経つと赤の他人なので、読めなくなります:-)。

#
# tsm2list.py - make list from json of "Tab Session Manager"
#
#       $Id: tsm2list.py,v 1.6 2025/10/11 07:09:03 saka Exp $
#

import sys
import json
from urllib.parse import urlparse
import html

def kk(x):
    u = urlparse(x[0])
    if u.hostname == None:
        dom = []
    else:
        dom = u.hostname.split('.')
    dom.reverse()
    return '.'.join(dom) + " " + u.path + " " + x[1]

if len(sys.argv) < 2:
    sys.exit(f"usage: python {sys.argv[0]} json-file")

f = open(sys.argv[1], "r")
j = json.load(f)

res = []

wlist = j[0]["windows"]
for w in wlist:
    tlist = wlist[w]
    for t in tlist:
        tv = tlist[t]
        res.append([tv["url"], tv["title"]])
res.sort(key=kk)

print(f"<html><head><title>{html.escape(sys.argv[1])}</title></head><body>")
print(f"<h1>{html.escape(sys.argv[1])}</h1><dl>")
for i in res:
    print(f"<dt>{html.escape(i[1])}</dt>")
    print(f"<dd><a href={i[0]}>{html.escape(i[0])}</a></dd>")
print("</dl></body></html>")

1点だけ工夫しているのは、URLのドメイン名をピリオドで区切って右から優先したものでソートしていることですね(関数kk)。要するに、同じサイトとか同じドメイン名、類似のドメイン名のものを近隣に並べたかったと。重複して開いているものとかも並ぶのでわかりやすいでしょう。

後は大したことしてないので、出力するHTMLの好みとかもあるでしょうから、適当にアレンジすればよいと思うので、github でリポジトリを作るのではなく、ここにペッと貼りました:-)。 

とりあえず。