tuk*_*kan 5

我相信这是不可能通过 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

我现在只介绍 windows 和 powershell(你也可以为 *nix 这样做):

我想这也是好主意,遵循最佳实践指南places.sqlfile。在开始更改文件之前,请务必阅读它。

注意:在玩之前备份你的places.sqlite!

在powershell中,你会

Import-Module pssqlite 
Run Code Online (Sandbox Code Playgroud)

(如果您使用的是 PS 版本 < 5.0,请在此处下载模块)

然后得到你的路径 places.sqlite

$db = 'C:\Users\login\AppData\Roaming\Mozilla\Firefox\Profiles\tf8oiuhk.default\places.sqlite'
Run Code Online (Sandbox Code Playgroud)

查询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
Run Code Online (Sandbox Code Playgroud)

插入、更新、删除数据的逻辑是一样的。

下面你可以找到例子insert,并delete因为这是你的问题。

插入数据使用 sqlINSERT INTO 例如:

insert into moz_bookmarks (attributes) VALUES (your_values), (next_values)
Run Code Online (Sandbox Code Playgroud)

例如

INSERT INTO moz_bookmarks (type, parent, title, dateAdded)  
     VALUES (1,5,'MyBookmark',CURRENT_TIMESTAMP)
Run Code Online (Sandbox Code Playgroud)

要删除值,您应该使用 sql 的delete

DELETE FROM from moz_places
     WHERE id=1112
Run Code Online (Sandbox Code Playgroud)

(不要忘记关闭 Firefox)

使用您的数据库链接 - 查找属性:https : //developer.mozilla.org/en-US/docs/Mozilla/Tech/Places/Database

编辑- 如何从 sqlite DB获取标签

简单地列出书签目录中的所有选项卡:

select * from moz_bookmarks where parent=4
Run Code Online (Sandbox Code Playgroud)

解释: 这将获得所有存储在places.sqlite 文件中的书签。标签存储在titleTAGs 文件夹的 id=4 列中

您可以从表中检查 ID moz_bookmarks_roots

???????????????????????????????????????
?   ? root_name       ? folder_id     ?
???????????????????????????????????????
? 1 ? places          ?   1           ?
? 2 ? menu            ?   2           ?
? 3 ? toolbar         ?   3           ?
? 4 ? tags            ?   4           ?
? 5 ? unfiled         ?   5           ?
???????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

现在如何找到带有某些书签的标签?

  1. 首先从这个问题“%How can I add or remove a bookmark tag%”中找到你想要使用的书签,例如标题

    SELECT * FROM moz_places where title LIKE '%How can I add or remove a bookmark tag%'
    
    Run Code Online (Sandbox Code Playgroud)

结果:

id              : 20079
url             : /sf/ask/3578692561/?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
Run Code Online (Sandbox Code Playgroud)
  1. 然后您转到moz_bookmarks可以找到实际记录的表(idfrommoz_placesfkfrom moz_bookmarks)。

    select * from moz_bookmarks where fk=20079
    
    Run Code Online (Sandbox Code Playgroud)

这个结果:

    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
Run Code Online (Sandbox Code Playgroud)

如您所见,您将获得两条记录。一个parent=75是书签文件夹。第二个是fk=20079( id) 到parent=77实际标签的映射:

    SELECT * FROM moz_bookmarks where id = 77
Run Code Online (Sandbox Code Playgroud)

title属性中获取标签的位置:

    id           : 77
    type         : 2
    fk           :
    parent       : 4
    position     : 0
    title        : stack_overflow test
    keyword_id   :
    folder_type  :
    dateAdded    : 1531298593878000
    lastModified : 1531298593884000
    guid         : AVcyFpGkrfzV
Run Code Online (Sandbox Code Playgroud)

所以在我的例子中的标签是: stack_overflow test

places.sqlite您可以在此处找到ER 模式。

编辑2忘记直接回答问题了。

更改 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
Run Code Online (Sandbox Code Playgroud)

然后我从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
Run Code Online (Sandbox Code Playgroud)

如您所见,只有一条记录而不是两条记录(检查我选择moz_bookmarks并找到两条记录的部分上方)

然后你必须id在 table 中找到一个免费的(s)moz_bookmarks。就我而言,它是id=80id=81(在您的情况下可能有所不同):

现在是你必须得到的棘手部分GUID。您可以通过 GUI- SQLite Manager及其SELECT GENERATE_GUID(). 然而,我们需要一个没有 gui 的,所以我们必须创建它。

如果您检查壁虎的 python makeGuid()函数,您将看到它们正在使用md5, hex。我会用类似的功能hex()randomblob().

首先生成标签记录: 然后是记录本身(type=2,parent=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>
Run Code Online (Sandbox Code Playgroud)

实际插入:

$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)))"
Run Code Online (Sandbox Code Playgroud)

然后你必须创建链接它的记录:

    id          : 81
    type       : 1
    fk          : 20223
    parent       : 80
    position     : 0
    title        :
    keyword_id   :
    folder_type  :
    dateAdded    : 1531298593884000
    lastModified : 1531298593884000
    guid         : <generated_GUID>
Run Code Online (Sandbox Code Playgroud)

实际插入:

$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)))"
Run Code Online (Sandbox Code Playgroud)

现在您可以检查您添加了两个新标签的记录news insert_firefox_tag_example

更新标签new_tag(您也必须添加当前标签!):

$sqlFirefoxQuery = "UPDATE moz_bookmarks
                       SET title = 'stack_overflow test new_tag' 
                     WHERE id = 77"
Run Code Online (Sandbox Code Playgroud)

然后执行它:

Invoke-SqliteQuery -DataSource $db -QueryTimeout 20 -Query $sqlFirefoxQuery
Run Code Online (Sandbox Code Playgroud)

您将获得更新的标签:

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
Run Code Online (Sandbox Code Playgroud)

删除标签,您只需输入一个空字符串(不要忘记在 Firefox 重启后可能会看到更改):

$sqlFirefoxQuery = "UPDATE moz_bookmarks
                       SET title = '' 
                     WHERE id = 77"
Run Code Online (Sandbox Code Playgroud)

结果:

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
Run Code Online (Sandbox Code Playgroud)

就是这样。