automator是个很方便的工具,当有重复批量处理事情的时候,可以帮上大忙。
使用chrome做网站特定内容下载,使用bulk media downloader插件,可以针对需要的内容,如mp3做批量下载,尤其对于很多在线播放网站,自动找到mp3的下载地址,直接批量下载。
这两个工具结合起来,自动化手工爬一个系列mp3,一个歌单什么的,简直不要太好用。
准备:
Chrome和插件
这个插件的用法是,安装好后,打开这个插件,会新开一个chrome窗口,当有需要的媒体内容出现在网页,会自动将内容链接过滤显示出来,之后在直接批量下载即可。
如图,左边是音乐播放,右边会自动将需要的内容和下载地址选中,下面有Download按钮,直接下载即可。
automator使用
这个工具就很有意思了
首先,需要一个循环,如果需要下载的url地址是数字组成的,就更方便了,
例如,有个200集的多媒体连载,每一集有个不同的地址,例如
http://xbd.wangluoyuming.com/gushi-1.html
……
http://xbd.wangluoyuming.com/gushi-200.html (这个地址是瞎编的 网络域名)
需要用automator循环组成这个系列地址,需要一个变量,从1到200,每次加一,配合地址的固定部分,生成一个url,然后把这个地址发送给chrome让chrome打开,打开后,bulk media downloader插件会自动选出需要的下载文件地址,每一个url选择一个,在bulk里面形成200个地址列表,最后在bulk里面点击下载即可。
开始在automator里面新建一个workflow
automator的变量
如图下方右边有两个显示选项,一个是日志log,另一个是变量variable,可以直接鼠标右键,新建变量,起名并设定值为1
OK,变量除了自定义之外,automator提供了很多可以直接使用的,比如时间、版本号之类的很多。
变量的用法是,Get和Set,这两个没有分类,直接左边在Library里面找到,拖拽的右边窗口,会自动列出之前所定义变量的名字
automator的循环
左边Library库里面的Utilities分类里面的Loop,直接鼠标拖拽到右边窗口即可。
Loop的功能是,从第一个动作,顺序到了loop后,再从第一个重新开始。
Loop的执行默认是,需要询问是否继续,现在直接执行时,每次循环到Loop,会提示是否要继续
现在是个空循环,执行的内容是
获取我的变量的值
设置我的变量的值
循环(提示继续或不继续)
组装序列地址automator让chrome打开url
这部分就需要用applescript来做了,automator也支持javascript
拖一个 执行AppleScript放在获取变量值的后面,即插入到第二步
input是上一个动作的输出,在Chrome的所有窗口的所有tab页面寻找包含“http://xbd.wangluoyuming.com/gushi-”字符串的tab,找到了就把该tab 设置为active,并用变量组装序列url让chrome打开,如果所有窗口都找不到,就在chrome新建一个window,并打开。从而bulk会自动获取所有需要的资源地址列表。
代码如下,细节解释略
on run {input, parameter}
set num to input as number
-- 设置常量
set TARGETURL to "http://xbd.wangluoyuming.com/gushi-"
set startNoTxt to num as string
set tab_URL to TARGETURL & startNoTxt & ".html"
set found to false
set foundwindowidx to 1
tell application "Google Chrome"
repeat with w in windows
set i to 1
repeat with t in tabs of w
if URL of t contains TARGETURL then
set active tab index of w to i -- 将活动tab设置为找到的i
set foundwindowidx to index of w
set found to true
exit repeat
end if
set i to i + 1
end repeat
if found then exit repeat
end repeat
if found then
set URL of active tab of window foundwindowidx to tab_URL
else
make new window
activate
open location tab_URL
end if
end tell
return (num + 1) as string
end run
注意 return语句,就是本动作输出给下一个动作的input,后面是Set Value,正好把这个已经加1的值赋值给我的变量。