如何在python中使用webbrowser模块打开一个新的标签页?

时间:2015-03-17 15:21:19

标签: python google-chrome

我目前正在尝试使用python中的webbrowser模块打开我的chrome默认新标签页。我已经开始使用它来打开随机网址,但是,当我尝试使用chrome:// newtab作为网址时,我只是收到一条消息,说明没有安装应用以打开此类型链接"

这里是相关的代码(不多):

import webbrowser
webbrowser.open_new_tab("chrome://newtab")

是的,chrome是我的默认浏览器。谢谢你的帮助!

2 个答案:

答案 0 :(得分:3)

请注意documentation表示:

  

请注意,在某些平台上,尝试使用此函数打开文件名可能会起作用并启动操作系统的关联程序。但是,既不支持也不便携。

自从我看到它以来已经有一段时间了,但我的回忆是,至少在某些系统上,它在底层工作的方式是将给定的URI传递给系统特定的内置命令,然后打开系统中的URI默认为传入任何类型的URI。换句话说,使用给定文件类型的默认应用程序。 URI是否指向本地文件并不重要。因此,URI http://examplce.comn/somefile.pdf将在系统默认PDF查看器上打开PDF文件,该查看器可能不是浏览器。正如文档所指出的那样,由于底层实现,这会偶然发生。

但是,在不同的操作系统中,不存在这样的系统特定命令,并且所有URI都将在Web浏览器中打开。

您没有提到您正在使用哪个操作系统(我忘记了哪个操作系统以哪种方式工作),但我怀疑您正在使用第一种类型的操作系统。 可能(再次取决于您拥有的系统)能够通过指定使用特定浏览器来覆盖默认行为。

您可以尝试将环境变量BROWSER设置为os.pathsep - 分开的浏览器列表,以便按顺序尝试。检查os.pathsepimport os; print os.pathsep)的值以查看系统使用的字符(通常':'表示POSIX或';'表示Windows),然后使用该字符分隔列表中的项目。当然,您可能只需要将一个项目分配给列表(chrome),在这种情况下您根本不需要使用分隔符。像这样(确保为您的系统使用正确的路径):

SET BROWSER="C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"

或者,您可以尝试使用webrowser.get()以编程方式选择浏览器。但是,在Python 3.3之前尚未添加对Chrome的支持。如果您使用的是Python 3.3+,请尝试:

import webbrowser
chrome = webbrowser.get('google-chrome') # or webbrowser.get('chrome')
chrome.open_new_tab('chrome://newtab')

注意:以上内容未经测试。我不知道您拥有哪个系统,因此无法复制您的特定设置。 YMMV。


<强>更新

正如我现在知道你在Python之前的3.3 windows机器上,以下内容可能会有所帮助。您还可以注册浏览器以便Python了解它:

pth = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
webbrowser.register('chrome', None, webbrowser.BackgroundBrowser(pth))
chrome = webbrowser.get('chrome')
chrome.open_new_tab('chrome://newtab')

答案 1 :(得分:0)

Python选项的看似防弹的坚如磐石的命令行

在开发中,以上方法对我来说效果很好。然后,我将代码移至生产服务器。我发现Windows的不同风格在python的webdriver模块上不能完全发挥作用-我非常沮丧!

我需要一种防弹方法来按特定顺序打开自动生成的html报告。

下面的代码是对我所做的所做的修改,效果很好。

import subprocess as SP
import time


def display_reports_in_chrome(param_1, param_2):
    front = f'start chrome.exe {param_1}\\reports\\'  # beginning of command string
    reports_list = [
        'report_1.html', 'report_2.html', 'report_3.html', 'report_4.html']

    url_list = []
    for report in reports_list:
        url_list.append(f'{front}{param_2}\\{report}')  # complete build of commands

    for url_cs in url_list:  # url_cs = url open command string
        time.sleep(0.1)  # helps to ensure the tabs order correctly
        clo = SP.run(url_cs, shell=True, capture_output=True)  # actual shell command

        # Stuff below makes sure it worked
        check = clo.returncode == 0
        error = clo.stderr.decode('utf-8')
        url_open_ok = check and not error
        err_msg = f'{error}. Let Thom know please!'

        assert url_open_ok, err_msg

我应该指出,this answer在SuperUser上启发了我尝试