【问题标题】:MacOSX or AppleScript: get current URL from FirefoxMacOSX 或 AppleScript:从 Firefox 获取当前 URL
【发布时间】:2011-07-14 21:31:22
【问题描述】:

如何从 Firefox(3 或 4)获取当前 URL?到目前为止,我发现的所有解决方案要么不起作用(例如带有 "class curl" 的解决方案),要么是丑陋的 hack,对我来说没有解决方案(发送按键以将 URL 复制到剪贴板)。

【问题讨论】:

  • @Powertieke:我正在使用 Chrome。但这应该进入我想出售给其他用户的应用程序,我怀疑我是否可以告诉他们“请使用 Chrome 或 Safari 而不是 Firefox”。
  • 也许你可以让 python webbrowser 模块触发一个内联 javascript,它可以使用谷歌齿轮或其他东西与脚本对话?

标签: macos firefox applescript


【解决方案1】:

窗口的 URL 不会通过 Applescript API 公开;甚至没有窗口的标签。获得它的唯一方法是通过 GUI 脚本。

Firefox 的 Applescript 实现简直太糟糕了,我不知道他们为什么还要麻烦。

【讨论】:

  • GUI 脚本是什么意思?我认为 AppleScript 也主要用于 GUI 脚本。
  • GUI 脚本是 Applescript 的一个方面,它允许直接操作控件,如按钮、复选框等。
  • 如何为 Firefox 做到这一点?它不需要应用程序使用 Cocoa GUI 元素吗?因为我认为 FF 不使用这些。
  • 我自己不编写 GUI 脚本,因为我发现它有问题并且很容易出错,但是这里有一个介绍:macosxautomation.com/applescript/uiscripting/index.html Firefox 应该通过 Mac OS X 支持这个,但是无论哪种方式,我都无法确切地告诉你。
  • 我尝试了一些类似的方法来查找文本框。对于其他应用程序,我能够获得所有 GUI 元素(按钮、文本框等)的列表。但对于 Firefox,我不是。所以我想这是不可能的。
【解决方案2】:

好吧,我现在有一个解决方案:我正在从 Firefox 的当前会话存储中读取它。这可行,但它总是最多过期 10 秒。

代码如下: https://github.com/albertz/foreground_app_info/blob/master/mac/app-scripts/url%20of%20Firefox.py

【讨论】:

    【解决方案3】:

    Firefox 3 的 AppleScript 实现非常糟糕,以至于您不得不求助于将 URL 从 Location 字段中复制出来,如上一篇文章所示,this thread

    【讨论】:

    • 这似乎是唯一可行的选择。系统事件在主窗口空间下方看不到任何 ui 元素......老实说,这是有史以来最糟糕的 applescript 支持。
    • 好吧,这绝对不是我的选择。我不想使用户剪贴板无效。我想大约每 10 秒检查一次当前 URL。
    【解决方案4】:
    tell application "Firefox" to activate
    
    tell application "System Events"
    
    keystroke "l" using {command down}
    
    keystroke "c" using {command down}
    
    end tell
    

    【讨论】:

    • "...丑陋的黑客对我来说没有解决方案(发送按键以将 URL 复制到剪贴板)"
    • 这个解决方案已经在整个网络上重复了,至少在当前快速的 Apple 硬件上,几乎 100% 可重复的“竞争条件”在系统事件执行之前不会激活 FF事物。它可以在两个故事之间保持一个很大的延迟(在我的非正式试验中,2 秒或更多),但这会堆积如山。注意:对于不熟悉 AppleScript 的人来说,所需的延迟语句实际上是“延迟 2”。
    【解决方案5】:

    很简单,如果你安装两个组件:

    如果你都安装了,下面的命令

    perl -MWWW::Mechanize::Firefox -E 'say WWW::Mechanize::Firefox->new(tab=>'current')->base()'
    

    将打印最上面的活动 Firefox url,如:

    http://stackoverflow.com/questions/5296995/macosx-or-applescript-get-current-url-from-firefox
    

    【讨论】:

      【解决方案6】:

      自 Firefox 87 起,您可以使用本机 AppleScript GUI 脚本来获取当前 URL。那是因为 Firefox 现在有 support for VoiceOver

      首先通过转到about:config 并将accessibility.force_disabled 属性设置为-1 来启用对VoiceOver 的Firefox 支持。请注意,VoiceOver 不必启用,只有 Firefox 支持。 ([2] 中的额外信息。)

      之后,您可以使用:

      tell application "System Events" to get value of UI element 1 of combo box 1 of toolbar "Navigation" of first group of front window of application process "Firefox"
      

      [1]:启用 VoiceOver 支持会使 Firefox 公开其窗口的内部结构以进行 GUI 脚本编写。
      [2]:有关额外信息和非永久选项(通过 AppleScript 切换 AXEnhancedUserInterface),请查看 this bug report

      【讨论】:

      • 这很奇怪。在正常情况下,我在 Sierra 下使用 Firefox v90 得到相同的错误和结果。但是,启用 VoiceOver 时会返回 url。我不能支持答案,因为这个先决条件对于大多数用户来说是一个非标准条件。就目前而言,这不是一个好的解决方法。
      • 抱歉,我现在才意识到我有一个应用程序可以在 FF 中启用 VoiceOver 支持。添加了有关如何手动启用它的部分,而无需全局启用 VoiceOver。希望对您有所帮助!
      猜你喜欢
      • 1970-01-01
      • 2010-09-29
      • 2012-07-05
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多