This site will have limited functionality while we undergo maintenance to improve your experience. If an article doesn't solve your issue and you want to ask a question, we have our support community waiting to help you at @FirefoxSupport on Twitter and/r/firefox on Reddit.

Cari Bantuan

Avoid support scams. We will never ask you to call or text a phone number or share personal information. Please report suspicious activity using the “Report Abuse” option.

Pelajari Lebih Lanjut

Programmatically edit browser history

  • 3 balas
  • 1 memiliki masalah ini
  • 1 kunjungan
  • Balasan terakhir oleh xusword1

more options

Hi Firefox,

A site I visited recently moved to another URL. Is there a way to edit my browser history so I can still be able to keep track of which pages I have visited?

For example:

if I have visited

https://site-old.com/topic1/page1.html https://site-old.com/topic1/page2.html

I want my browser history to also contain

https://site-new.com/topic1/page1.html https://site-new.com/topic1/page2.html

So I can see that I have already visited the page1 and page2 on topic1 as the link color would be purple

Would I be able to script something in a developer console and achieve that? Or would I need to program a plugin?

thanks!

Hi Firefox, A site I visited recently moved to another URL. Is there a way to edit my browser history so I can still be able to keep track of which pages I have visited? For example: if I have visited https://site-old.com/topic1/page1.html https://site-old.com/topic1/page2.html I want my browser history to also contain https://site-new.com/topic1/page1.html https://site-new.com/topic1/page2.html So I can see that I have already visited the page1 and page2 on topic1 as the link color would be purple Would I be able to script something in a developer console and achieve that? Or would I need to program a plugin? thanks!

Solusi terpilih

First, use I use python to save the history into a json file

 import os
 import sqlite3
 from urllib.parse import urlparse
 # fill in your own values
 user = "<user>"
 profile_dir = "<profile_dir>"
 source_site = "<source_site>"
 target_site = "<target_site>"
 ###
 data_path = f"C:\\Users\\{user}\AppData\Roaming\Mozilla\Firefox\Profiles\{profile_dir}"
 files = os.listdir(data_path)
 history_db = os.path.join(data_path, 'places.sqlite')
 c = sqlite3.connect(history_db)
 ## the following is from trial an error - super messy and require cleanup... but it works
 cursor = c.cursor()
 select_statement = f"select title, url, rev_host, visit_count, favicon_id, frecency, last_visit_date, description, site_name from moz_places where url like \"https://{source_site}%\";"
 cursor.execute(select_statement)
 query_results = cursor.fetchall()
 result = []
 file_counter = 0
 for title, url, rev_host, visit_count, favicon_id, frecency, last_visit_date, description, site_name in query_results:
     parsed = urlparse(url)
     replaced_raw = parsed._replace(netloc=target_site)
     replaced = replaced_raw.geturl()
     site_name = replaced_raw.scheme + "://" + replaced_raw.hostname
     item = {
         "site": site_name,
         "title": title,
         "url": replaced[len(site_name):]
     }
     result.append(item)
     if len(result) == 300:
         with open(f"result{str(file_counter).rjust(5, '0')}.json", "w") as out:
             json.dump(result, out)
         result = []
         file_counter = file_counter + 1
 with open(f"result{str(file_counter).rjust(5, '0')}.json", "w") as out:
     json.dump(result, out)


Then assign that variable to a variable named pages in console window

 pages = <ctrl + v>
 pages.forEach(page => {
     site = page.site
     title = page.title
     url = page.url
     history.pushState(site, title, url)
 })
Baca jawaban ini dalam konteks 👍 0

Semua Balasan (3)

more options

First, use I use python to save the history into a json file

 import os
 import sqlite3
 
 from urllib.parse import urlparse
 # fill in your own values
 user = "<user>"
 profile_dir = "<profile_dir>"
 source_site = "<source_site>"
 target_site = "<target_site>"
 ###
 data_path = f"C:\\Users\\{user}\AppData\Roaming\Mozilla\Firefox\Profiles\{profile_dir}"
 files = os.listdir(data_path)
 history_db = os.path.join(data_path, 'places.sqlite')
 c = sqlite3.connect(history_db)
 ## the following is from trial an error - super messy and require cleanup... but it works
 cursor = c.cursor()
 select_statement = f"select title, url, rev_host, visit_count, favicon_id, frecency, last_visit_date, description, site_name from moz_places where url like \"https://{source_site}%\";"
 cursor.execute(select_statement)
 query_results = cursor.fetchall()
 result = []
 file_counter = 0
 for title, url, rev_host, visit_count, favicon_id, frecency, last_visit_date, description, site_name in query_results:
     parsed = urlparse(url)
     replaced_raw = parsed._replace(netloc=target_site)
     replaced = replaced_raw.geturl()
     site_name = replaced_raw.scheme + "://" + replaced_raw.hostname
     item = {
         "site": site_name,
         "title": title,
         "url": replaced[len(site_name):]
     }
     result.append(item)
     if len(result) == 200:
         with open(f"result{str(file_counter).rjust(5, '0')}.json", "w") as out:
             json.dump(result, out)
         result = []
         file_counter = file_counter + 1
 with open(f"result{str(file_counter).rjust(5, '0')}.json", "w") as out:
     json.dump(result, out)


Then assign that variable to a variable named pages in console window

 pages = <ctrl + v>
 pages.forEach(page => {
     site = page.site
     title = page.title
     url = page.url
     history.pushState(site, title, url)
 })

Diperbarui oleh xusword1 pada

more options

updated as followed

Note that each iteration can only insert 200 entries in history otherwise we get "Too many calls to Location or History APIs within a short timeframe." I tried to find any configuration that fixes this issue but I cannot

Diperbarui oleh xusword1 pada

more options

Solusi Terpilih

First, use I use python to save the history into a json file

 import os
 import sqlite3
 from urllib.parse import urlparse
 # fill in your own values
 user = "<user>"
 profile_dir = "<profile_dir>"
 source_site = "<source_site>"
 target_site = "<target_site>"
 ###
 data_path = f"C:\\Users\\{user}\AppData\Roaming\Mozilla\Firefox\Profiles\{profile_dir}"
 files = os.listdir(data_path)
 history_db = os.path.join(data_path, 'places.sqlite')
 c = sqlite3.connect(history_db)
 ## the following is from trial an error - super messy and require cleanup... but it works
 cursor = c.cursor()
 select_statement = f"select title, url, rev_host, visit_count, favicon_id, frecency, last_visit_date, description, site_name from moz_places where url like \"https://{source_site}%\";"
 cursor.execute(select_statement)
 query_results = cursor.fetchall()
 result = []
 file_counter = 0
 for title, url, rev_host, visit_count, favicon_id, frecency, last_visit_date, description, site_name in query_results:
     parsed = urlparse(url)
     replaced_raw = parsed._replace(netloc=target_site)
     replaced = replaced_raw.geturl()
     site_name = replaced_raw.scheme + "://" + replaced_raw.hostname
     item = {
         "site": site_name,
         "title": title,
         "url": replaced[len(site_name):]
     }
     result.append(item)
     if len(result) == 300:
         with open(f"result{str(file_counter).rjust(5, '0')}.json", "w") as out:
             json.dump(result, out)
         result = []
         file_counter = file_counter + 1
 with open(f"result{str(file_counter).rjust(5, '0')}.json", "w") as out:
     json.dump(result, out)


Then assign that variable to a variable named pages in console window

 pages = <ctrl + v>
 pages.forEach(page => {
     site = page.site
     title = page.title
     url = page.url
     history.pushState(site, title, url)
 })

Diperbarui oleh xusword1 pada