利用Mac上的Alfred软件+Python实现兼容360和谷歌浏览器历史记录和书签的插件,便于我们随时随地跳转指定的网页

效果展示

搜索关键词nba相关的书签和历史记录,回车跳转对应链接


原理篇

找到浏览器书签和历史记录文件的数据存储位置和数据格式,并用python进行解析,再结合Alfred进行展示和使用

"""
浏览器书签是json文件存储
360浏览器书签位置:/Users/xxx/Library/Application Support/360Chrome/Default/360UID2547290641_V8/Bookmarks
谷歌浏览器:/Users/xxx/Library/Application Support/Google/Chrome/Default/Bookmarks历史记录是sqlite文件存储
360浏览器历史记录位置:/Users/xxx/Library/Application Support/360Chrome/Default/History -- urls表
谷歌浏览器历史记录位置: /Users/xxx/Library/Application Support/Google/Chrome/Default/History -- urls表
"""

利用navicat查看sqlite

直接指定数据库文件建立链接

查看表结构

解决database is locked

360浏览器在使用时,直接访问它的History sqlite数据库文件会报错database is locked,推测是360会始终维持着排它锁,导致其他线程无法访问,解决方法是直接实时cp一份源文件出来进行read操作

Alfred插件核心代码

import copy
import json
import sqlite3
import os
import sys
from urllib import parse# 书签存在位置
booksDir = '/Users/xxx/Library/Application Support/360Chrome/Default/360UID2547290641_V8/Bookmarks'
bookList = []# 历史记录存在位置
historyDir = '/Users/xxx/Library/Application\ Support/360Chrome/Default/History'
# 指定一个历史记录缓存位置 避免database is locked
tempDir = '/Users/cxy/360History'
historyList = []# 关键词查找逻辑
def AddList(allList, url , name, keylist):flag1 = 0flag2 = 0# 多个关键词同时在名称中包含 或者 多个关键词同时在url中包含for j in keylist:if j.lower() in name.lower():flag1 += 1# url中的url编码部门也要参与搜索if parse.quote(j).lower() in url.lower():flag2 += 1if flag1 == len(keylist):allList.append({'name': name, 'url': url, 'type':1})elif flag2 == len(keylist):allList.append({'name': name, 'url': url, 'type': 2})# 加载json文件
def loadJsonFile(route):with open(route, 'r', encoding='utf8')as fp:json_data = json.load(fp)return json_data# json递归
def getUrlsInBookmarks(root, keylist):for i in root:if i['type'] != 'folder':url = i['url']name = i['name']AddList(bookList,url,name,keylist)else:getUrlsInBookmarks(i['children'], keylist)def getBooks(keylist):bookmarks = loadJsonFile(booksDir)getUrlsInBookmarks(bookmarks['roots']['bookmark_bar']['children'], keylist)def getHistory(keylist):# sqlite文件拷贝后使用 防止浏览器线程给文件加锁无法访问os.system('cp '+historyDir+' '+tempDir)conn = sqlite3.connect(tempDir)cursor = conn.cursor()SQL = """SELECT DISTINCT(url), title, datetime((last_visit_time/1000000)-11644473600, 'unixepoch', 'localtime') AS last_visit_time FROM urls ORDER BY last_visit_time DESC """cursor.execute(SQL)query_result = cursor.fetchall()cursor.close()conn.close()nameList = []for i in query_result:name = i[1]url = i[0]# 去重if name != '' and name in nameList:continueelse:nameList.append(name)AddList(historyList, url, name, keylist)def printResult(historyList, bookList):items = {"items": []}template = {"title": "","subtitle": "","arg": "","icon": {"path": ""}}for i in bookList:template["arg"] = i['url']template["icon"]['path'] = 'mark.png'if i['type'] == 1:template["title"] = i['name']template["subtitle"] = i['url']if i['type'] == 2:template["title"] = parse.unquote(i['url'])template["subtitle"] = i['name']items["items"].append(copy.deepcopy(template))for i in historyList:template["arg"] = i['url']template["icon"]['path'] = 'history.png'if i['type'] == 1:template["title"] = i['name']template["subtitle"] = i['url']if i['type'] == 2:template["title"] = parse.unquote(i['url'])template["subtitle"] = i['name']items["items"].append(copy.deepcopy(template))print(json.dumps(items,ensure_ascii=False))if __name__ == '__main__':keylist = sys.argv[1:]getBooks(keylist)getHistory(keylist)printResult(historyList, bookList)

workflow文件下载和使用

链接: https://pan.baidu.com/s/1hm1S51zb_mHOi6ADbuunow 提取码: m0lw

下载完成后,修改插件代码中历史记录和书签的存储位置即可使用

【效率工具】Mac上Alfred 实现查询 360/Chrome浏览器 历史记录+书签相关推荐

  1. mac网页java无法加载,chrome浏览器mac版无法加载怎么办_chrome浏览器mac版打不开网页解决方法-win7之家...

    对于使用苹果电脑的用户来说,想要安装chrome浏览器时,就需要选择相应版本的mac版chrome浏览器,然而最近有些用户在使用chrome浏览器mac版时却出现了无法加载,打不开网页的问题,那么ch ...

  2. 在iOS设备上如何使用Chrome浏览器的书签

    核心提示:谷歌Chrome浏览器iOS版正式登陆AppStore.不过有很多人安装以后没有找到书签工具,以为没有.其实不然.iOS设备上的Chrome浏览器是内置有书签工具的,和Safari相比,不是 ...

  3. 提高效率:10款好用的谷歌chrome浏览器插件、扩展程序

    Awesome Chrome Plugins 盘点那些好用的Chrome插件 1. CrxMouse Chrome™ Gestures 作用:高度可自定义的鼠标手势.超级拖拽.鼠标滚轮手势.遥感手势, ...

  4. 在同一台电脑上安装不用的谷歌chrome浏览器版本

    有时在一台电脑上不同业务系统要求的chrome浏览器版本版本不同,我们可以在一台电脑上理论可以安装N个chrome浏览器版本, 安装不同版本的chrome浏览器 1.下载好所需要版本的chrome谷歌 ...

  5. mac selenium 连接已经打开的chrome浏览器

    今天在mac环境下尝试了一下用selenium连接现有的服务器,本来想绕过某宝的反爬虫机制的,但是并没有什么用,但是这个技术不错,我这里分享一下实现过程. 添加环境变量 export PATH=&qu ...

  6. Mac selenium调试已经存在的Chrome浏览器

    文章目录 配置chrome 连接浏览器 配置chrome open -e ~/.zshrc 在结尾添加: export PATH="/Applications/Google Chrome.a ...

  7. MAC 中selenium、webdriver打开Chrome浏览器闪退问题(版本号一致)

    使用selenium.webdriver打开谷歌浏览器,登录页面后闪退,但是版本号是对应的,是因为driver的全局变量问题 1.不设置driver为全局,放在函数内(会闪退) from seleni ...

  8. iOS工程师Mac上的必备软件

    转自:wythetan 前言   iOS工程师一直都是那么的高逼格,用的是Mac电脑,耍的是iPhone手机,哇咔咔~~   但是,作为一名iOS开发工程师,我们除了高逼格外,还必须是全能的.你不会点 ...

  9. IOS-工程师Mac上的必备软件

    前言   iOS工程师一直都是那么的高逼格,用的是Mac电脑,耍的是iPhone手机,哇咔咔~~   但是,作为一名iOS开发工程师,我们除了高逼格外,还必须是全能的.你不会点UI设计.不会点后台语言 ...

最新文章

  1. java 密钥工厂 desede_20145212 实验五《Java网络编程》
  2. JS window.open()属性
  3. SQL语句中ON DUPLICATE KEY UPDATE column=IF(条件,值1,值2 ) 的使用
  4. 【IM】关于半监督学习的理解
  5. c语言股票最大收益_长期持有指数基金是最好的选择?指数基金的历史年化收益率是多少?...
  6. MOSS中集成各个子网站的数据到一个页面,做决策支持页面的首选: Web Capture
  7. 详解分布式系统与消息投递(架构师必备)
  8. 【2020.2.29更新】高通蓝牙芯片QCC3003,QCC3008 学习视频教材
  9. java毕业设计成品源码网站基于SpringBoot旅游信息管理系统
  10. 5GNR解调分析手持式频谱分析仪
  11. U盘不识别量产工具解决方案
  12. project哪个版本好用
  13. 商业与计算机科学,新加坡留学:楷博高等教育商业信息系统与计算机科学课程解析...
  14. 计算机主机拆转视频,新旧电脑数据转移(如何将旧电脑数据转移到新电脑)
  15. 自动化运维 -- 02 Ansible
  16. 关于配置文件config的学习
  17. switch写打折促销活动C语言,求C语言大神编一个程序(分别用switch和if-else结构)某商店推出打折活动,要求购物达到或超过2000元的...
  18. 网络工程师课程---3、IP与路由器(ip地址的主要作用是什么)
  19. Makefile自动依赖写法
  20. 东方甲乙木,南方丙丁火,中央戊己土,西方庚辛金,北方壬癸水

热门文章

  1. 必备的Canvas接口和动画效果大全
  2. 白杨SEO:SEO还有前途吗?只做百度SEO还行吗?传统SEO如何转行与方向有哪些?
  3. 爬虫实战 爬取糗事百科
  4. Java核心技术 卷1-总结-11
  5. 百度地图api开发详解(android版).pdf,百度地图API开发指南原版.pdf
  6. Git基础(21):GitLab创建组、用户、项目
  7. 机器人测钢卷直径_机器人热轧钢卷喷号漆
  8. 项目开发过程中如何使用免费开发手机验证码验证功能(详细教程)
  9. HTML+CSS从入门到入土
  10. 对角阵、特征值与特征向量