我一直在看places database和Web Extension Bookmarks API,但是我不确定该怎么做或是否有可能。
答案 0 :(得分:2)
我相信无法通过Web扩展书签API来实现。那是保留的,只能在附件中使用。
引用:
用于WebExtensions的JavaScript API可以在扩展程序的内部使用 后台脚本以及与 扩展程序,包括浏览器操作或页面操作弹出窗口,侧边栏, 选项页或新标签页。这些API中的一些也可以是 由扩展程序的内容脚本访问(请参阅 内容脚本指南)。
要使用功能更强大的API,您需要在您的服务器上请求权限 扩展程序的manifest.json
我不知道您是使用Windows还是* nix。一般的想法是操纵SQLite数据库。
对于书签,您需要一个名为places.sqlite的文件,您可以在Windows的-C:\Users\login\AppData\Roaming\Mozilla\Firefox\Profiles
在* nix上,您可以执行以下操作:
find . -name 'places.sqlite'
,通常您会把它放在家里的某个地方:
例如
/home/tukanos/.mozilla/firefox/tf8oiuhk.default/places.sqlite
我认为遵循places.sqlfile
的{{3}}也是一个好主意。开始更改文件之前,请务必先阅读它。
注意:在使用places.sqlite之前先对其进行备份!
在powershell中,您会
Import-Module pssqlite
(如果使用的PS版本是<5.0,则下载模块best practices guide)
然后获取places.sqlite
的路径
$db = 'C:\Users\login\AppData\Roaming\Mozilla\Firefox\Profiles\tf8oiuhk.default\places.sqlite'
要查询sql数据库:
$sqlFirefoxQuery = "SELECT places.id,
places.URL,
places.GUID,
bookmarks.title,
bookmarks.id,
bookmarks.parent
FROM moz_places as places
JOIN moz_bookmarks as bookmarks
ON places.id = bookmarks.fk"
Invoke-SqliteQuery -DataSource $db -QueryTimeout 20 -Query $sqlFirefoxQuery | Out-file -Encoding UTF8 Bookmarks_firefox.txt
插入,更新,删除数据的逻辑相同。
在下面您可以找到insert
和delete
的示例,因为这是您的问题。
要插入数据,请使用sql INSERT INTO
例如:
insert into moz_bookmarks (attributes) VALUES (your_values), (next_values)
例如
INSERT INTO moz_bookmarks (type, parent, title, dateAdded)
VALUES (1,5,'MyBookmark',CURRENT_TIMESTAMP)
要删除值,您应该使用sql的delete
:
DELETE FROM from moz_places
WHERE id=1112
(不要忘记关闭Firefox)
使用您的数据库链接-查找属性:here
仅列出书签目录中的所有标签:
select * from moz_bookmarks where parent=4
说明:
这将使您获得所有存储在places.sqlite文件中的书签。标记存储在TAGs文件夹具有id = 4的列title
中
您可以从表moz_bookmarks_roots
中检查ID:
╔═══╦═════════════════╦═══════════════╗
║ ║ root_name ║ folder_id ║
╠═══╬═════════════════╬═══════════════╣
║ 1 ║ places ║ 1 ║
║ 2 ║ menu ║ 2 ║
║ 3 ║ toolbar ║ 3 ║
║ 4 ║ tags ║ 4 ║
║ 5 ║ unfiled ║ 5 ║
╚═══╩═════════════════╩═══════════════╝
现在如何查找带有某些书签的标签?
首先找到您要使用的书签 例如此问题的标题“%我如何添加或删除书签标签%”
SELECT * FROM moz_places where title LIKE '%How can I add or remove a bookmark tag%'
结果:
id : 20079
url : https://stackoverflow.com/questions/51124179/how-can-i-add-or-remove-a-bookmark-tag-in-firefox-via-the-command-line/51264053?noredirect=1#
comment89523757_51264053
title : How can I add or remove a bookmark tag in Firefox via the command line? - Stack Overflow
rev_host : moc.wolfrevokcats.
visit_count : 1
hidden : 0
typed : 0
favicon_id : 238
frecency : 125
last_visit_date : 1531301813682000
guid : w6vYlxdKQU6V
foreign_count : 2
url_hash : 47357855952022
然后转到moz_bookmarks
表,您可以在其中找到实际记录(id
中的moz_places
是fk
中的moz_bookmarks
)。 / p>
select * from moz_bookmarks where fk=20079
此结果:
id : 76
type : 1
fk : 20079
parent : 75
position : 0
title : How can I add or remove a bookmark tag in Firefox via the command line? - Stack Overflow
keyword_id :
folder_type :
dateAdded : 1531298577890000
lastModified : 1531298577894000
guid : R0961JLfZYKj
id : 78
type : 1
fk : 20079
parent : 77
position : 0
title :
keyword_id :
folder_type :
dateAdded : 1531298593884000
lastModified : 1531298593884000
guid : BW__oMQbHerd
您看到的是两条记录。其中一个具有parent=75
,即书签文件夹。第二个是fk=20079
(id
)到parent=77
的映射,它们是实际的标记:
SELECT * FROM moz_bookmarks where id = 77
在title
属性中获得标记的位置:
id : 77
type : 2
fk :
parent : 4
position : 0
title : stack_overflow test
keyword_id :
folder_type :
dateAdded : 1531298593878000
lastModified : 1531298593884000
guid : AVcyFpGkrfzV
所以我的标签是:stack_overflow
test
您可以找到https://developer.mozilla.org/en-US/docs/Mozilla/Tech/Places/Database的places.sqlite
的E-R模式。
更改sqlite数据库时,请关闭 Firefox 实例。
要添加标签-您必须了解逻辑(我必须选择一个没有标签的新书签):
首先创建,我必须有一个新书签
$sqlFirefoxQuery = "SELECT * FROM moz_places where title LIKE '%Cnn%'"
PS C:\> Invoke-SqliteQuery -DataSource $db -QueryTimeout 20 -Query $sqlFirefoxQuery
id : 20223
url : https://edition.cnn.com/
title : CNN International - Breaking News, US News, World News and Video
rev_host : moc.nnc.noitide.
visit_count : 1
hidden : 0
typed : 0
favicon_id : 2015
frecency : 75
last_visit_date : 1531392673997000
guid : qqCRafq4FIcn
foreign_count : 1
url_hash : 47358730651511
然后我从moz_bookmarks
表中进行选择:
$sqlFirefoxQuery = "select * from moz_bookmarks where fk=20223"
PS C:\> Invoke-SqliteQuery -DataSource $db -QueryTimeout 20 -Query $sqlFirefoxQuery
id : 79
type : 1
fk : 20223
parent : 75
position : 1
title : CNN International - Breaking News, US News, World News and Video
keyword_id :
folder_type :
dateAdded : 1531392718191000
lastModified : 1531392718197000
guid : 2ywnKBmbDWJI
如您所见,只有一条记录而不是两条记录(请检查我选择moz_bookmarks
的部分上方并找到两条记录)
然后,您必须在表id
上找到免费的moz_bookmarks
。就我而言,它是id=80
和id=81
(在您的情况下可以不同):
现在到了棘手的部分,您必须获得GUID
。您可以通过GUI获取一个-here及其SELECT GENERATE_GUID()
。但是,我们需要一个没有gui的程序,因此我们必须创建它。
如果您检查壁虎的python SQLite Manager函数,您会发现它们正在使用md5
,hex
。我将使用类似的功能hex()
和randomblob()
来做到这一点。
首先生成标签记录: 然后是记录本身(类型= 2,父代= 4):
id : 80
type : 2
fk :
parent : 4
position : 0
title : news insert_firefox_tag_example
keyword_id :
folder_type :
dateAdded : 1531298593878000
lastModified : 1531298593884000
guid : <generated_GUID>
实际插入:
$sqlFirefoxQuery = "INSERT INTO moz_bookmarks (id, type, parent, position, title, dateAdded, lastModified, guid)
VALUES (80,
2,
4,
0,
'news insert_firefox_tag_example',
strftime('%s',CURRENT_TIMESTAMP)*1000000,
strftime('%s',CURRENT_TIMESTAMP)*1000000,
hex(randomblob(2)) || hex(randomblob(2)) || hex(randomblob(2)))"
然后,您必须创建链接它的记录:
id : 81
type : 1
fk : 20223
parent : 80
position : 0
title :
keyword_id :
folder_type :
dateAdded : 1531298593884000
lastModified : 1531298593884000
guid : <generated_GUID>
实际插入:
$sqlFirefoxQuery = "INSERT INTO moz_bookmarks (id, type, fk, parent, position, dateAdded, lastModified, guid)
VALUES (81,
1,
20223,
80,
0,
strftime('%s',CURRENT_TIMESTAMP)*1000000,
strftime('%s',CURRENT_TIMESTAMP)*1000000,
hex(randomblob(2)) || hex(randomblob(2)) || hex(randomblob(2)))"
现在,您可以检查记录,在其中添加了两个新标签news
insert_firefox_tag_example
。
要使用new_tag
更新标签(您还必须添加当前标签!):
$sqlFirefoxQuery = "UPDATE moz_bookmarks
SET title = 'stack_overflow test new_tag'
WHERE id = 77"
然后执行它:
Invoke-SqliteQuery -DataSource $db -QueryTimeout 20 -Query $sqlFirefoxQuery
您将获得更新的标签:
PS C:\> $sqlFirefoxQuery = "SELECT * FROM moz_bookmarks where id = 77"
PS C:\> Invoke-SqliteQuery -DataSource $db -QueryTimeout 20 -Query $sqlFirefoxQuery
id : 77
type : 2
fk :
parent : 4
position : 0
title : stack_overflow test new_tag
keyword_id :
folder_type :
dateAdded : 1531298593878000
lastModified : 1531298593884000
guid : AVcyFpGkrfzV
要删除标签,您可以简单地放置一个空字符串(不要忘记,重新启动Firefox后可能会看到更改):
$sqlFirefoxQuery = "UPDATE moz_bookmarks
SET title = ''
WHERE id = 77"
结果:
PS C:\> $sqlFirefoxQuery = "SELECT * FROM moz_bookmarks where id = 77"
PS C:\> Invoke-SqliteQuery -DataSource $db -QueryTimeout 20 -Query $sqlFirefoxQuery
id : 77
type : 2
fk :
parent : 4
position : 0
title :
keyword_id :
folder_type :
dateAdded : 1531298593878000
lastModified : 1531298593884000
guid : AVcyFpGkrfzV
就这样。