阅读本指南之前,请希望阅读一下《123浏览器脚本介绍》,了解123浏览器脚本的基本背景。
123浏览器脚本其运行原理如下图所示:
https://123.browser/
这个虚拟的独立页面中运行。https://123.browser/
中运行,还可以调用123浏览器定制扩充的私有 API,也可以与通过 API 与目标页面进行交互。
浏览器脚本分为 2 种,其功能能力是一样的,只是来源和存储不一样:
用123浏览器打开 https://123llq.com/browser_script/list/
页面,就可以“增删改查”管理用户自己本地浏览器脚本了。
现在以开发一个下载 bilibili 视频的浏览器脚本为示例,介绍如何开发一个浏览器脚本。
假如我们要下载这个页面 https://www.bilibili.com/video/BV1ik4y1h7Wa/
上的视频,我们在浏览器打开这个页面和对应的开发者工具,输入 __playinfo__
和 __INITIAL_STATE__
发现这里面包含了这个视频的信息和下载信息,如下图所示:
那我们浏览器脚本下载这个页面视频的思路是:
__playinfo__
和 __INITIAL_STATE__
信息。
我们开始开发调试浏览器脚本。用123浏览器打开 https://123.browser/
页面。后续浏览器脚本其实就是在这个页面上运行的,只有这个页面才有权限调用123浏览器提供的私有 API。
然后再打开这个页面的开发者调试工具,在 Console 里面输入 chrome.yesPrivate
,这就是123浏览器提供的私有 API,如下图所示:
其浏览器脚本代码和注释如下:
(function() { var biz = {}; biz.url = 'https://www.bilibili.com/video/BV1ik4y1h7Wa/'; // 为后面的网络请求设置 header 信息,可以带上相关的浏览器 cookies biz.headers = [{'name':'Referer','value': biz.url}]; biz.onDownloadPage = function(is_ok, net_error, result) { if(is_ok) { // 通过正则表达式搜索下载到页面,找到 __playinfo__ 信息 var pi = /window\.__playinfo__=({.+}).*<\/script><script>.*/.exec(result); biz.play_info = JSON.parse(pi[1]) // 通过正则表达式搜索下载到页面,找到 __INITIAL_STATE__ 信息 var is = /window\.__INITIAL_STATE__=({.+}).*;\(function\(\).*/.exec(result); biz.initial_state = JSON.parse(is[1]) // 从 __INITIAL_STATE__ 里面提取到当前视频的 title var title = biz.initial_state.videoData.title; // 从 __playinfo__ 里面提取到当前视频的 真实的 audio 和 video 下载地址 var audio_url = biz.play_info.data.dash.audio[0].base_url; var video_url = biz.play_info.data.dash.video[0].base_url; // 调用私有 api 创建一个浏览器下载项,分析下载视频的 audio 和 video链接,并最终合并成一个视频文件 chrome.yesPrivate.createDownloadAudioVideo(title, biz.url, audio_url, video_url,biz.headers); } else { console.log(net_error); } }; // 调用私有 api 发起网络请求,可以自定义 header chrome.yesPrivate.downloadString(biz.url, biz.headers, biz.onDownloadPage); })();
浏览器脚本要求最好以 JavaScript 匿名函数的方式编写和运行。这是因为多个浏览器脚本都是运行在同一个 https://123.browser/
页面。为了避免脚本之间的冲突和干扰,最好以匿名函数的方式编写和运行。
浏览器脚本开发好之后,可以在123浏览器里面打开 https://123llq.com/browser_script/add/
页面,把脚本代码添加到浏览器中。如下图所示:
这个页面的几个字段:
注意:我们之前开发的浏览器脚本代码中 biz.url = 'https://www.bilibili.com/video/BV1ik4y1h7Wa/';
要替换成 biz.url = '{[(url)]}';
这样的模板。因为浏览器脚本动态运行时,会把代码中的 {[(url)]}
替换成目前页面的真实 url:
添加完成之后,我们打开视频页面,运行浏览器脚本如下所示: