2008.12.04 by sfufoet

ShortcutBinder – 用快捷键点击链接!

46

几个月前,碰到一个用快捷键点击链接的 firefox 插件,它自动为页面上所有的链接添加快捷键,而且不能自定义,这样就没啥实用价值了。前些天,突发奇想,自己写一个能给任意网页的添加快捷键的 GreaseMonkey 脚本。

在动手之前,我用 userscript shortcut 为关键字搜索了一下,找到了这个牛叉叉的 GreaseMonkey 脚本——ShortcutBinder!它使用了 XPath 来选取网页中链接和控件。

嘛是 XPath
XPath 是一门在 XML 文档中查找信息的语言。看懂下面的东西,需要一点网页基础,如果你没有一点网页基础,建议去 w3school 中文版学习下

ShortcutBinder 有啥用呢?比如:

  1. 像在 Gmail 和 Google Reader 里一样,用 J、K 来点击小众的上一篇文章和下一篇文章链接。
  2. 用 S 来定位到小众的搜索框、Google 的搜索框、任意网页的搜索框。
  3. 用 C 来定位到小众的留言栏。
  4. 用 Alt + A 来切换到 Google 的高级搜索页面。

非常适合被 Gmail 惯坏的快捷键爱好者。

安装

你需要 Firefox 浏览器一只,并安装扩展 GreaseMonkey,然后安装脚本 ShortcutBinder

例子 1:用 J、K 来点击小众的上一篇文章和下一篇文章链接:

  1. 在开始之前,设置一下 ShortcutBinder,右击状态栏的 GreaseMonkey 图标,指向“用户脚本命令”,选择“Set shortcut for bind dialog”。

    ShortcutBinder   用快捷键点击链接![图] | 小众软件

  2. 这时候,当前网页就会出现设置界面,建议把添加快捷键(Add Shortcut)设置为 A,把,管理快捷键(Manage shortcut)设置为 M。设置后需要刷新页面,快捷键才能启用:

    ShortcutBinder   用快捷键点击链接![图] | 小众软件

  3. 打开小众里有上一篇下一篇链接的文章,比如 EXE Password Protector – 给 EXE 加个密码 [今日免费]
  4. 然后按下快捷键 A,添加快捷键。点击“两个 CSV 小工具”这个链接,XPath to element 就会自动获得链接的 XPath 表达式。

    ShortcutBinder   用快捷键点击链接![图] | 小众软件

    自动生成的 XPath 路径表达式太过智能了,把最后“[(text()=' 两个 CSV 小工具')]”删除。不删除的话,这个路径只能匹配到“两个 CSV 小工具”这篇文章。修改后的路径能匹配到小众单篇文章页面的上一篇文章的链接。下一篇也一样处理。怎么理解这个路径表达式呢?很简单,把它看成系统路径一样。

  5. 在 Shortcut 里输入你想要的快捷键,比如 J(注:截图里是 S,汗。。),当然也可以是组合键。然后点击 Save。
  6. 不用刷新页面,按下 J 试试吧。

例子 2:用 S 来定位到小众的搜索栏。按下 A 添加快捷键,然后点击搜索框,在 Shortcut 里输入 S,保存。

例子 3:用 S 来定位到 Google 的搜索框:

  1. 打开 Google 随便搜索,比如小众软件
  2. 右击网页,选择“查看页面源代码”,在源代码里搜索“小众软件”,搜索到的第一个结果是这样的:<input type=text name=q size=41 maxlength=2048 value=“小众软件” title=“Search”>,我们只需要用到“name=q”。
  3. 按下 A 添加快捷键,然后点击搜索框,获得的 XPath 路径是这样的:
    ShortcutBinder   用快捷键点击链接![图] | 小众软件
  4. 这样的路径是不通用的。删除[(@value='小众软件')]。脚本立刻提醒:“We’ve matched 4 nodes!”,意思是匹配到了 4 个节点。如果这里只匹配到 1 个节点,就可以和例子 1 一样,输入快捷键,保存。
    ShortcutBinder   用快捷键点击链接![图] | 小众软件
  5. 怎么办呢?用上第二步记录下来的“name=q,把“[(@value='小众软件')]”修改为“[(@name='q')]”。
    ShortcutBinder   用快捷键点击链接![图] | 小众软件
  6. 建议把 Include,修改为 http://www.google.*/search?*,这样的地址只会匹配到各个国家域名的 Google 搜索页面,不会匹配到 Google 的其他服务。不修改也没什么问题,只是我搜索英文资料的时候,比较喜欢切换到 Google 英文版
  7. 剩下的步骤略。

比较不足的是管理快捷键的界面,我们按下 M 试试:

ShortcutBinder   用快捷键点击链接![图] | 小众软件

所有你定义的快捷键都出现了,不管是在哪个网站定义的。如果只显示当前网站的快捷键,就完美了。另外,Include 一栏,只能填写一个网址。

最后,ShortcutBinder 只能点击链接、输入框、单选按钮。下拉列表框是没办法点击的。

19 Comments:

  1. 1. 钢铁的咆哮 # 2008/12/04 20:56

    沙发?

    回复

    钢铁的咆哮 # 2008/12/04 20:57

    @钢铁的咆哮, 自己抱自己
    话说这篇文章好高深,看不懂…

    回复

    cuthead # 2008/12/08 12:34

    @钢铁的咆哮, 你应该为你的智商讨一个说法

  2. 2. 李二嫂的猪 # 2008/12/04 21:01

    眼睛好疼……像 Eson 一样,掩面泪奔离开……

    回复

    sfufoet # 2008/12/04 21:03

    @李二嫂的猪, 疼啥??

    回复

    李二嫂的猪 # 2008/12/05 07:47

    @李二嫂的猪, 看美女图片看到用眼过度……

    回复

    Enson # 2008/12/05 08:29

    @李二嫂的猪, Eson 是谁?

    回复

    李二嫂的猪 # 2009/01/04 09:49

    @Enson, ……少打个字母……怀念猴子的头像……

  3. 3. 呃 # 2008/12/04 21:18

    小众风格大变……

    回复

    sfufoet # 2008/12/04 21:21

    @呃, orz,要不是出于对此脚本的喜欢,我才懒得写长文。。

    回复

    armgod # 2008/12/04 21:33

    @呃, 不要说有谐音的话好不好

    回复

    sfufoet # 2008/12/04 21:46

    @armgod, 今天天气好冷,armgod 的笑话让气温又降低几度。

    armgod # 2008/12/04 22:28

    @sfufoet,?我有讲过笑话吗

    Enson # 2008/12/05 08:30

    @armgod, 好冷…

  4. 4. 导演博客 # 2008/12/04 21:34

    怎么内容页面CSS不显示了..

    回复

    sfufoet # 2008/12/04 21:35

    @导演博客, 刷新下。

    回复

  5. 5. scavin # 2008/12/04 21:39

    我日,激动。忍不住都说出脏话了。

    这东西太牛逼了。。。。。。。。我能,我能拿回家抱着吗/

    回复

    sfufoet # 2008/12/04 21:43

    @scavin, 你爱抱着搂着每人管。

    回复

    armgod # 2008/12/04 22:29

    @scavin, 真面目暴露了哈

    回复

    Enson # 2008/12/05 08:31

    @scavin, 貌似有J晴…

    回复

    Guar # 2008/12/05 10:00

    虽然还没试,不过看这个功能真的真的很nb

    回复

  6. 6. scavin # 2008/12/04 21:42

    这东西是人发明的吗

    回复

    sfufoet # 2008/12/04 21:44

    @scavin, 可能是个像我一样经常异想天开的 ET 发明的。

    回复

    Enson # 2008/12/05 08:32

    @sfufoet, 冥王星欢迎你…

  7. 7. meidog # 2008/12/04 23:58

    如果找到2个结果匹配XPATH,怎么办?

    回复

    sfufoet # 2008/12/05 09:24

    @meidog, 在那个页面?点击那个链接?请给出截图。

    回复

    meidog # 2008/12/05 11:04

    @sfufoet, 不。我就是想要这样的功能。如果有2个结果符合,按一次,第一个获得焦点,再按就NEXT,那该多好啊。这个能做到吗?或者说,有别的能做到吗?

    sfufoet # 2008/12/05 11:25

    @meidog, 没有。

  8. 8. 熊歌 # 2008/12/05 05:49

    豆瓣上面那个搜索框有2个结果匹配什么弄?

    回复

    sfufoet # 2008/12/05 09:39

    @熊歌, 建议你再仔细研究下文章的第三个例子。这个例子就可以解决豆瓣的问题。

    生成的是:

    //div[(@id='maxw')]/form[(@id='ssform')]/div[(@id='header')]/div[(@id='searbar')]//input[(@class='j a_search_text') and (@id='page_focus')]

    根据例子 3 修改为

    //div[(@id='maxw')]/form[(@id='ssform')]/div[(@id='header')]/div[(@id='searbar')]//input[(@id='page_focus')]

    回复

  9. 9. xyly # 2008/12/05 08:26

    学学XML咯

    回复

  10. 10. David # 2008/12/05 08:54

    又看牛文。

    回复

  11. 11. siriuz # 2008/12/05 11:06

    原来只能选上一页和下一页,有没有类似gmail的脚本?用j和k选择上下连接,然后用o打开?

    回复

    sfufoet # 2008/12/05 11:24

    @siriuz, 没有。

    回复

  12. 12. prcgolf # 2008/12/05 11:08

    小众介绍好用的firefox扩展时能否说一下此扩展能否有IE下的版本,毕竟IE还是用的人多。firefox使用起来有难度,懒的用。
    感觉不如THEWorld

    回复

    sfufoet # 2008/12/05 11:20

    @prcgolf, 一般是没有 IE 下版本的。 GreaseMonkey 的脚本,有些适合 IE 扩展 IE7pro http://www.ie7pro.com/。

    FF 哪里有难度啦?不就是安装扩展麻烦了点。

    回复

    scavin # 2008/12/05 11:22

    拥有几乎无限的扩展是 FF 与 IE 最大的区别,也是 FF 的魅力所在

    回复

  13. 13. zxone # 2008/12/05 13:04

    我还担心它会与输入状态冲突,试了一下,竟然正常!
    一直想有这种功能的插件。另外,不知道有没有方便的修改页面元素的插件,比如把一些网站的“下载”按钮修改到显眼的位置。
    真希望AHK能够对输入状态进行侦测,这样以来大多数窗口下就不需要多按Ctrl、ALt、Win和Shift等功能键了。

    回复

    sfufoet # 2008/12/05 13:11

    @zxone, 如果冲突的话,小众就不会强烈推荐啦。

    你的问题很简单。 GreaseMonkey 就可以搞定。不过, GreaseMonkey 脚本太难写了。建议用傻瓜化可视化的 GreaseMonkey 脚本生成插件:Platypus plugin 来实现(http://platypus.mozdev.org/)

    回复

  14. 14. cuthead # 2008/12/08 12:35

    非常好,小众软件如果能天天发表这种文章而不是那些弱智火星文来获取90后的流量,我会天天来支持的。solidot留。

    回复

  15. 15. 乐者为王 # 2008/12/27 08:35

    非常好的功能,我找到手工操作google的方式

    回复

  16. 16. wang316316 # 2009/01/17 12:37

    有傲游版的插件就好了

    回复

  17. 17. sheng # 2009/03/19 19:11

    超级好用啊,谢谢博主的推荐。用来作为baidu和google的翻页了。

    回复

  18. 18. Eureka # 2009/10/16 23:48

    好东西 很方便!!

    回复

  19. 19. 卫卡星 # 2011/03/03 10:00

    如果网页有多个一样的链接,能不能时间一键全部点击呢!

    回复

输入昵称与邮箱就可以评论

称呼*

邮箱*

网址