【问题标题】:webbrowser.get("firefox") on a Mac with Firefox "could not locate runnable browser"带有 Firefox 的 Mac 上的 webbrowser.get("firefox") “找不到可运行的浏览器”
【发布时间】:2010-12-06 00:45:51
【问题描述】:

我认为我需要知道运行哪个神奇的命令行或 OSA 脚本程序来启动现有 Firefox 浏览器中的 URL(如果正在运行),或者如果没有运行 Firefox,也启动 Firefox .在 Mac 上。

我正在测试一个 Python 程序 (Crunchy Python),它设置了一个 Web 服务器,然后使用 Firefox 作为前端。它使用以下内容启动 Web 应用程序:

try:
    client = webbrowser.get("firefox")
    client.open(url)
    return
except:
    try:
        client = webbrowser.get()
        client.open(url)
        return
    except:
        print('Please open %s in Firefox.' % url)

我的 Mac 上默认安装了 Safari,但我也安装并运行了 Firefox。上面的代码在 Safari 中启动了新的 URL(在 localhost 上)。 Crunchy 在 Safari 中效果不佳。我想在 Firefox 中看到它,因为我有 Firefox。在 Python 2.5、2.6 和 2.7(来自版本控制)下,我得到了这个:

>>> import webbrowser
>>> webbrowser.get("firefox")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/webbrowser.py", line 46, in get
    raise Error("could not locate runnable browser")
webbrowser.Error: could not locate runnable browser

火狐就在那里。我尝试使用 webbrowser.get("/Applications/Firefox.app/Contents/MacOS/firefox %s") 启动一个新的 Firefox 实例,然后抱怨另一个 Firefox 实例已经在运行。

我真的希望 webbrowser 在 Firefox 的现有选项卡/窗口中打开 URL,如果它已经在运行,或者在新的 Firefox 中没有运行。

我查看了 webbrowser.py,看起来 MacOSX 没有“firefox”支持。没关系,我可以补充。但是我不知道如何以我想要的方式在Firefox中打开URL。

想法?现在,我可以强制 Crunchy 给我 URL,我可以手动将其粘贴到 Firefox 中。

【问题讨论】:

    标签: python macos firefox browser


    【解决方案1】:

    您应该使用启动服务打开 URL。您可以使用 LaunchServices 模块、Apple 的 open 实用程序或我的 launch 实用程序 (here) 来执行此操作:

    open 可能是最简单的:

    % open -b org.mozilla.firefox http://www.stackoverflow.com/
    

    (或者,当然,在 Python 中使用subprocess 或类似的等价物)应该可以满足您的需求。

    【讨论】:

    • 真的,Python 的“网络浏览器”应该这样做。如果这是正确的一般答案,那么我将为主要 Python 代码提供一个补丁,除非您想成为这样做的人?
    • 我已将其作为问题 7192 添加到 Python 错误跟踪器(请参阅 bugs.python.org/issue7192 )。这包括部分补丁,但我不认为这是一个完整的解决方案。
    【解决方案2】:

    Apple 使用启动服务来查找应用程序。应用程序可以通过 open 命令使用 - Apple developer man page for open

    你想要的python命令是

    client = webbrowser.get("open -a /Applications/Firefox.app %s")
    

    根据 Nicholas Riley 的评论

    如果 Firefox 在应用程序列表中,那么你可以使用 open -a Firefox.app %s

    【讨论】:

    • 你不应该硬编码 Firefox 的路径;它可以安装在任何地方。
    • "open -a /Applications/Firefox.app %s" 不起作用。即使是从使用 Safari(我的默认浏览器)打开 URL 的命令行。我挖了一些,这似乎是 OS X 10.4(我有)和 10.5 之间的区别。如果我执行“open -a Firefox %s”,那么它可以工作。另一个选项(环顾四周)是“open -b org.mozilla.firefox %s”。真的不知道“捆绑标识符”是什么,但很多地方都使用这种咒语。我将使用 -b 版本。谢谢你的线索!
    • 捆绑标识符是 Mac OS X 上应用程序的唯一标识符(四字节“创建者代码”的部分替换)。启动服务索引捆绑标识符和类型信息,以便处理应用程序/文档/URL 打开;如果您想查看它索引的信息类型,请运行 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump。
    • 只需与 Monterey 核对一下,我提供的命令行在命令行中仍然有效,但捆绑标识符可能是最好的方法
    猜你喜欢
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 2023-01-07
    • 2017-02-04
    • 1970-01-01
    • 2014-04-17
    • 2020-01-05
    • 2022-07-22
    相关资源
    最近更新 更多