目前项目,使用需要对需求方电脑的内网页面做自动化操作:
- 刷新列表
- 进入详情
- 操作表单字段
原来的技术栈是:
- 安卓,利用无障碍服务实现app自动模拟操作
- pc,利用
ui-bot
完成pc网页自动模拟操作
我计划使用 chrome 扩展
来替代完成pc自动化脚本。
注意: Chrome Extension
最新的版本是 v3,下面的说明默认从 v3 直接开始。
请注意 Chrome88 支持 v3 ,并且 v3 相比 v2 有一些不兼容改动,因此看经验总结时候需要关注版本号。
基本概念
chrome extension 可以由下面的技术组成:
- background scripts 后台脚本
- content scripts 内容脚本
- options page 配置页面
- UI elements 操作页面
- manifest.json 清单文件
manifest.json
相当于 package.json ,扩展的相关配置。
名称 | 值 | 备注 |
---|---|---|
name | string | 扩展名 |
description | string | 扩展描述 |
version | ‘1.0’,string |
版本号 |
manifest_version | 3,number | 最新版是 3 |
background | {service_worker:’x.js’} | 后台脚本,下面章节 |
permissions | [‘storage’] 等 | 权限控制,下面章节 |
action | default_popup:’a.html’ | 默认操作页面,下面章节 |
default_icon:{},16-32-48-128,也可以是路径 | 设定浏览器中展示的icon | |
icons | {}, 16-32-48-128 | 设定扩展列表中展示的icon |
options_page | option.html | 选项页面,下面章节 |
host_permissions | [url,’:///*’] | |
commands | _excute_action:{suggested_key:{default:’’}} | 快捷键 |
description | ||
theme | 主题相关,先略 |
在 chrome 扩展里,打开开发者模式,将文件夹拖入就可以。
background
不兼容更新,
service_worker
替换了background
。 如果看到旧版教程,这里api不一致。
在 manifest.json
中设定 background
里的值。
后台脚本权限较高,可以访问到全局变量 chrome
里的内容。
比如官方案例中提到的 chrome.runtime.onInstalled
事件。
permissions
在 manifest.json
中设定值,用来管理权限,保护隐私。
比如官方案例中用到了 chrome.storage.sync.set({})
,这就需要用到 storage
权限。
这个时候我们重新看官方案例中提供的代码
let color = '#3aa757';
chrome.runtime.onInstalled.addListener(() => {
chrome.storage.sync.set({ color });
console.log('Default background color set to %cgreen', `color: ${color}`);
});
后台脚本调用 chrome.runtime
里的 onInstalled
,把变量存入了 stroage
里,并且已经主动声明了需要存储权限。
popup 操作页面
在 action.default_popup:'popup.html'
,设定了默认的UI操作页面。
在指定的页面中设定文件路径。在 popup
中的js脚本依然可以访问 chrome.storage.sync.get('color', ()=>{})
来读取存储的值。
官方案例中,使用了 存储storage,激活标签activeTab,脚本注入scripting 来完成:
- 后台脚本存储默认值
- 用户触发脚本,读取当前激活页面,读取存储值,注入js,让页面变绿
统一的 action
之前v2 中的 browser_action
和 page_action
都统一成了 action
,比如上一章节提到的 action.default_popup
就统一收起来了。
可使用的api
- chrome
- storage 操作存储内容
- sync.get
- sync.set
- runtime
- onInstalled 安装完成事件
- tabs 依赖
permission:['activeTab']
query({active:true, currentWindows:true})
获取当前激活的 tab
- scritpting 依赖
permission:['scripting']
- executeScript 指定tab指定回调,注入脚本
- action
- onClicked
- storage 操作存储内容
chrome.accessibilityFeatures
作用不大
chrome.action
控制chrome右侧的图标功能,比如下图的这些按钮。
key | value | description |
---|---|---|
default_title | ‘’ | hover时候展示的描述文字 |
default_icon | url | icon图标路径 |
default_popup | url | 弹窗路径 |
- icon可以动态改
action.setIcon()
- title 可以动态改
action.setTitle()
- 可以设置badge,也就是角标,
action.setBadgeBackgroundColor()
和action.setBadgeText()
,具体color可以是rgba或者 hex - popup尺寸大小自动调整大小,不小于 2525,不大于 800600,也可以动态修改
action.setPopup()