macOS 实现 Safari 和 Chrome 同步书签

淮城一只猫 奇技淫巧
阅读量 0 评论量 0

前言

前一段时间在外面使用手机急于寻找一些资料,需要用书签功能,主要手机浏览器主力是 Safari 然而在电脑却使用的是 Chrome ,主要这俩者在跨平台上并不是好用,一直苦恼书签不同步的问题。

实现

后来实在是受不了还是觉得有必要搞个同步书签的办法,之前也考虑到使用扩展来实现,但使用大多数扩展应用发现都不支持对自带的书签栏进行读写操作,只能把收藏的书签传到第三方服务器然后在扩展页面寻找对应的书签,所以这个方案直接被我放弃了。

搜集大多数资料还是觉得使用 AppleScript 去模拟点击同步书签比较靠谱,如果实现的话需要做好下面几个步骤:

  • 编写 AppleScript 脚本,模拟下列操作
    • 打开 Safari 浏览器
    • 文件 - 书签 - 导入自 - Chrome
    • 取消 历史记录密码,Chrome 历史记录过大会导致 Safari 浏览器卡死
    • 关闭 Safari 浏览器
  • 编写 shell 脚本,能够在终端应用上执行脚本
  • 开机运行脚本

脚本

AppleScript 语法虽然看不懂,但根据 Demo 和已有的代码我也大概知道怎么写,所以上面操作大体如下:

set SecondsDelay1 to 5
set SecondsDelay2 to 1
set importFromMenuItem to "导入自"
set importFromGoogleChromeMenuItem to "Google Chrome…"

tell application "Safari"
	quit
end tell

tell application "Google Chrome"
	quit
end tell

delay SecondsDelay1

tell application "Safari" to activate

tell application "System Events"
	tell process "Safari"
		click menu bar item "文件" of menu bar 1
		click menu item importFromMenuItem of menu "文件" of menu bar item "文件" of menu bar 1
		delay SecondsDelay2
		click menu item importFromGoogleChromeMenuItem of menu importFromMenuItem of menu item importFromMenuItem of menu "文件" of menu bar item "文件" of menu bar 1
		
		click checkbox "密码" of sheet 1 of window 1
		click checkbox "历史记录" of sheet 1 of window 1
		
		click button "导入" of sheet 1 of window 1
		
		repeat until static text "完成从Google Chrome导入" of sheet 1 of window "起始页" exists
			-- 等待导入完成
		end repeat
		
		click button "好" of sheet 1 of window "起始页"
		
		delay SecondsDelay2
		
		tell application "System Events"
			keystroke "q" using command down
		end tell
	end tell
end tell

脚本本质上就是根据软件的 UI 关键词来进行模拟点击,所以写起来也不算困难。

然后在终端执行:

osascript ~/Others/自动导入书签.scpt

就可以运行脚本了,走到这一步还需要在系统设置授权辅助功能权限。

新建 auto-bookmarks.sh 脚本:

#!/bin/sh
osascript ~/Others/自动导入书签.scpt

sleep 1 & killall Terminal

sleep 5 是让脚本系统进入延迟运行,保证脚本运行的提高率,然后将脚本授权权限:

sudo chmod 777 auto-bookmarks.sh

系统设置 - 通用 - 登陆项auto-bookmarks.sh 脚本添加到 登录时打开 列表里。

到此为止,算是把书签同步这个大问题解决了。

更新

使用脚本启动会在终端留下历史纪录,所以使用 plist 来启动脚本,在 ~/Library/LaunchAgents/ 目录下新建 com.iiong.sync.bookmarks.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>com.iiong.sync.bookmarks</string>
	<key>ProgramArguments</key>
	<array>
		<string>/usr/bin/osascript</string>
		<string>/Users/jaxson/Others/脚本/自动导入书签.scpt</string>
	</array>
	<key>RunAtLoad</key>
	<true/>
	<key>KeepAlive</key>
	<false/>
</dict>
</plist>

这样可以开机启动脚本。

喵~