【问题标题】:Python webbrowser.open() to open Chrome browserPython webbrowser.open() 打开 Chrome 浏览器
【发布时间】:2014-04-22 02:50:15
【问题描述】:

根据文档http://docs.python.org/3.3/library/webbrowser.html,它应该在默认浏览器中打开,但由于某种原因在我的机器上打开了 IE。我做了一个谷歌搜索,我遇到了一个答案,说我需要注册浏览器,但我不确定如何使用 webbrowser.register() 并且文档似乎不是很清楚。如何注册 Chrome,以便我传递给 webbrowser.open() 的 url 在 Chrome 而不是 IE 中打开?

【问题讨论】:

  • 我设法通过在 URL 前面加上“https://”来修复它并且它工作正常。当我没有在 Edge 中打开它时。

标签: python python-3.x


【解决方案1】:

您可以使用 Chrome 的路径调用 get()。下面是一个示例 - 将 chrome_path 替换为您平台的正确路径。

import webbrowser

url = 'http://docs.python.org/'

# MacOS
chrome_path = 'open -a /Applications/Google\ Chrome.app %s'

# Windows
# chrome_path = 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe %s'

# Linux
# chrome_path = '/usr/bin/google-chrome %s'

webbrowser.get(chrome_path).open(url)

【讨论】:

  • 如何在 kiosk 模式下打开 chrome for linux?
  • 不工作。它执行 chrome 但不退出。如何执行 chrome 并确保其已打开然后进行下一步操作?
  • Linux 文件访问权限可能会阻止 Google Chrome 加载,例如用户访问与根访问。我安装了两个版本的 Chrome。一个用于 root,一个用于用户。
  • @Christian 你知道为什么 "Path/file.exe %s" 有效但不是这个: (r"Path/file.exe") 或 str(Path/file.exe) 吗?跨度>
  • webbrowser库和selenium有什么区别
【解决方案2】:

在 Windows 的情况下,路径使用 UNIX 样式的路径,因此将反斜杠变为正斜杠。

webbrowser.get("C:/Program Files (x86)/Google/Chrome/Application/chrome.exe %s").open("http://google.com")

见:Python: generic webbrowser.get().open() for chrome.exe does not work

【讨论】:

  • 这对我帮助很大
  • 不工作。它会执行 Chrome,但不会退出。
  • @zacharias 知道为什么“Path/browser.exe %s”可以工作,但不能这样:(r"Path/browser.exe") 或 (str(Path/browser.exe))?
  • 不工作:webbrowser.get("path") webbrowser.open("url") 工作:webbrowser.get("path").open("url") (知道为什么?)
  • 谢谢!它起作用了:)你能告诉我如何从python中的浏览器获得响应吗?就我而言,它只是简单的 JSON 响应
【解决方案3】:
import webbrowser 
new = 2 # open in a new tab, if possible

# open a public URL, in this case, the webbrowser docs
url = "http://docs.python.org/library/webbrowser.html"
webbrowser.get(using='google-chrome').open(url,new=new)

您可以通过更改a link 中给出的参数“using”来使用任何其他浏览器

【讨论】:

  • 要打开一个新标签,您可以使用 webbrowser.get(using='google-chrome').open_new_tab(url)
【解决方案4】:

帮助我在 google-chrome 上打开新标签:

import webbrowser

webbrowser.open_new_tab("http://www.google.com")

【讨论】:

    【解决方案5】:

    请检查:

    import webbrowser
    chrome_path = 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe %s'
    webbrowser.get(chrome_path).open('http://docs.python.org/')
    

    【讨论】:

      【解决方案6】:

      这是获取 Chrome 路径的一种比较可靠的方法。

      (请注意,在您特别需要 Chrome 而不是默认浏览器、Chromium 或其他东西时才应该这样做。)

      def try_find_chrome_path():
          result = None
          if _winreg:
              for subkey in ['ChromeHTML\\shell\\open\\command', 'Applications\\chrome.exe\\shell\\open\\command']:
                  try: result = _winreg.QueryValue(_winreg.HKEY_CLASSES_ROOT, subkey)
                  except WindowsError: pass
                  if result is not None:
                      result_split = shlex.split(result, False, True)
                      result = result_split[0] if result_split else None
                      if os.path.isfile(result):
                          break
                      result = None
          else:
              expected = "google-chrome" + (".exe" if os.name == 'nt' else "")
              for parent in os.environ.get('PATH', '').split(os.pathsep):
                  path = os.path.join(parent, expected)
                  if os.path.isfile(path):
                      result = path
                      break
          return result
      

      【讨论】:

      • 您的方法看起来很有希望,但您的答案不完整。您正在导入哪些 Python 库以使您的方法正常工作?我收到一条错误消息:“NameError: name '_winreg' is not defined”。
      • 感谢您的超快回答。您在 2 分钟内回复!您的示例中缺少以下导入:import os、winreg、shlex。然后唯一需要的是将变量“_winreg”更改为“winreg”,因为在 Python 3 中,名称已更改为删除前导下划线。
      【解决方案7】:

      我注意到并遇到问题的一件事是斜杠,在 Windows 中,您需要在路径中有两个斜杠,这样才能正常工作。

      import webbrowser
      chrome_path = "C://Program Files (x86)//Google//Chrome//Application//Chrome.exe %s"
      webbrowser.get(chrome_path).open("https://github.com/")
      

      这至少对我有用

      【讨论】:

        【解决方案8】:

        在 Windows 中为我工作

        把你的 chrome 应用程序的路径,不要忘记把 th %s 放在最后。我仍在尝试使用 html 代码打开浏览器而不保存文件...我会在找到方法时添加代码。

        import webbrowser
        chromedir= "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe %s"
        webbrowser.get(chromedir).open("http://pythonprogramming.altervista.org")
        

        >>> link to: [a page from my blog where I explain this]<<<

        【讨论】:

          【解决方案9】:

          如果您在 windows 中设置了默认浏览器,那么您可以这样做:

          open_google = webbrowser.get('windows-default').open('https://google.com')
          
          // OR
          
          open_google = webbrowser.open('https://google.com')
          

          【讨论】:

          • 它使用 webbrowser 模块,所以不要忘记通过以下方式导入它:import webbrowser 请记住,您也可以使用 selenium 来执行此操作。
          【解决方案10】:

          为我玩的游戏制作了这个,它是相关的,所以我要离开它。这真的很简单。从 platform.system 中获取值。根据不同操作系统的已知值检查它。如果找到匹配项,它会为您设置 chrome 路径。如果没有找到,它会打开默认浏览器访问您的链接。希望它对某人有用。

          import time
          import os
          import webbrowser
          import platform
          
          user_OS = platform.system()
          chrome_path_windows = 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe %s'
          chrome_path_linux = '/usr/bin/google-chrome %s'
          chrome_path_mac = 'open -a /Applications/Google\ Chrome.app %s'
          chrome_path = ''
          game_site_link = 'https://www.gamelink'
          
          if user_OS == 'Windows':
              chrome_path = chrome_path_windows
          elif user_OS == 'Linux':
              chrome_path = chrome_path_linux
          elif user_OS == 'Darwin':
              chrome_path = chrome_path_mac
          elif user_OS == 'Java':
              chrome_path = chrome_path_mac
          else:
              webbrowser.open_new_tab(game_site_link)
          
          webbrowser.get(chrome_path).open_new_tab(game_site_link) 
          

          我实际上在此处对其进行了更多更改,因为我仍在开发此启动器,所以它已更新

          import time
          import webbrowser
          import platform
          import subprocess
          import os
          import sys
          
          privateServerLink = 'https://www.roblox.com/games/2414851778/TIER-20-Dungeon-Quest?privateServerLinkCode=GXVlmYh0Z7gwLPBf7H5FWk3ClTVesorY'
          userBrowserC = input(str("Browser Type: chrome, opera, iexplore, firefox : "))
          userSleepTime = int(input("How long do you want it to run?"))
          if userBrowserC == 'opera':
              userBrowserD = 'launcher.exe'
          else:
              userBrowserD = userBrowserC
          
          if userBrowserC == "chrome":
              taskToKill = "chrome.exe"
          else:
              taskToKill = "iexplore.exe"
          
          if userBrowserC == 'chrome' and platform.system() == 'Windows':
               browserPath = 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe %s'
          elif userBrowserC == 'chrome' and platform.system() == 'Linux':
              browserPath = '/usr/bin/google-chrome %s'
          elif userBrowserC == 'chrome' and platform.system() == 'Darwin' or 
          platform.system() == 'Java':
              browserPath = 'open -a /Applications/Google\ Chrome.app %s'
          elif userBrowserC == 'opera' and platform.system() == 'Windows':
              browserPath = 'C:/Users/'+ os.getlogin() +'/AppData/Local/Programs/Opera/launcher.exe'
          elif userBrowserC == 'iexplore' and platform.system() == 'Windows':
              browserPath = 'C:/Program Files/internet explorer/iexplore.exe %s'
          elif userBrowserC == 'firefox' and platform.system() == 'Windows':
              browserPath = 'C:/Program Files/Mozilla Firefox/firefox.exe'
          else:
              browserPath = ''
          while 1 == 1:   
              subprocess.Popen('SynapseX.exe')
              time.sleep(7)
              webbrowser.get(browserPath).open_new_tab(privateServerLink)
              time.sleep(7)  
              os.system('taskkill /f /im '+taskToKill)
              time.sleep(userSleepTime)
          

          【讨论】:

            【解决方案11】:
            if sys.platform[:3] == "win":
                # First try to use the default Windows browser
                register("windows-default", WindowsDefault)
            
                # Detect some common Windows browsers, fallback to IE
                iexplore = os.path.join(os.environ.get("PROGRAMFILES", "C:\\Program Files"),
                                        "Mozilla Firefox\\FIREFOX.EXE")
                for browser in ("firefox", "firebird", "seamonkey", "mozilla",
                                "netscape", "opera", iexplore):
                    if shutil.which(browser):
                        register(browser, None, BackgroundBrowser(browser))
            

            100% 工作....见行号 535-545..根据您的要求将 iexplore 的路径更改为 firefox 或 Chrome... 在我的情况下更改路径我在上面的代码中提到的F​​irefox设置......

            【讨论】:

              【解决方案12】:

              你也可以使用这个:

              import webbrowser
              
              chrome_path = r"C:\Program Files\Google\Chrome\Application\chrome.exe"
              url = "http://docs.python.org/"
              
              webbrowser.register('chrome', None, webbrowser.BackgroundBrowser(chrome_path))
              webbrowser.get('chrome').open_new_tab(url)
              

              【讨论】:

                【解决方案13】:

                我在下面@mehrdad 的回答中找到了我自己的问题的答案。要以通用方式从 Windows 查询浏览器路径,@mehrdad 提供了一个很好的短代码,它使用 Windows 注册表,但没有包含足够的上下文来使其正常工作。

                import os 
                import winreg
                import shlex
                
                def try_find_chrome_path():
                    result = None
                    if winreg:
                        for subkey in ['ChromeHTML\\shell\\open\\command', 'Applications\\chrome.exe\\shell\\open\\command']:
                            try: result = winreg.QueryValue(winreg.HKEY_CLASSES_ROOT, subkey)
                            except WindowsError: pass
                            if result is not None:
                                result_split = shlex.split(result, False, True)
                                result = result_split[0] if result_split else None
                                if os.path.isfile(result):
                                    break
                                result = None
                    else:
                        expected = "google-chrome" + (".exe" if os.name == 'nt' else "")
                        for parent in os.environ.get('PATH', '').split(os.pathsep):
                            path = os.path.join(parent, expected)
                            if os.path.isfile(path):
                                result = path
                                break
                    return result
                
                print(try_find_chrome_path())
                

                感谢@mehrdad 的回答!!

                【讨论】:

                  【解决方案14】:

                  当你有一个无效的 URL 时(确保 url 以 https:// 或 http:// 开头,如果不是,则添加它),它通常打开默认 IE。

                  【讨论】:

                    【解决方案15】:

                    这样的事情应该可以工作:

                    from selenium import webdriver
                    #driver = webdriver.Firefox()
                    driver = webdriver.Chrome()
                    driver.get("http://www.python.org")
                    

                    【讨论】:

                    • 以上代码将在 Firefox 和 Chrome 浏览器中打开 URL,而不是默认浏览器 (IE)
                    • 这甚至没有使用同一个库?
                    【解决方案16】:

                    信不信由你,这是最简单的方法

                    webbrowser.open("www.stackoverflow.com")#just remove https:// or http:// and simply add www.something.com
                    

                    以这个网址为例

                    https://something.com

                    如果您愿意提供此网址:https://something.com 或 something.com 它会在IE中打开

                    但如果你这样输入:www.something.com 它将在 chrome 中打开

                    你可以试试这个,这会奏效的!

                    (注意:如果它有其他后缀,例如 take https://meet.google.com,如果你尝试添加 www. 到它,你的浏览器会抛出一个拼写错误)

                    【讨论】:

                      【解决方案17】:

                      我想我也找到了解决方法

                      • 方法一(将/替换为\
                      ...
                      expression = "https://stackoverflow.com/questions/22445217/python-webbrowser-open-to-open-chrome-browser"
                      
                      if ("https:" in expression) or ("http:" in expression):
                          expression = expression.replace("/", "\\")
                          web.open_new_tab(expression.strip())
                      ...
                      
                      • 方法 2(使用 www 尽可能多的 u 建议)
                      ...
                      expression = "www.python.org"
                      
                      if "www." in expression:
                          web.open_new_tab(expression.strip())
                      ...
                      

                      【讨论】:

                        【解决方案18】:

                        在 Selenium 中尝试获取活动标签的 URL,

                        from selenium import webdriver
                        
                        driver = webdriver.Firefox()
                        print driver.current_url # This will print the URL of the Active link
                        

                        发送改变标签的信号

                        driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + Keys.TAB)
                        

                        再次使用

                        print driver.current_url
                        

                        我在这里只是为你提供一个伪代码。

                        您可以将其放入循环中并创建自己的流程。

                        我是 Stackoverflow 的新手,所以还在学习如何写出正确的答案。

                        【讨论】:

                          【解决方案19】:

                          至少在 Windows 中它必须足够,并且您不必关心浏览器的路径。

                          import webbrowser
                          
                          url = 'https://stackoverflow.com'
                          
                          webbrowser.open(url)
                          

                          注意:使用上述代码行,它只能在 windows 默认浏览器(Microsoft Edge)中打开。

                          【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 2015-12-26
                            • 2021-06-10
                            • 1970-01-01
                            • 2013-08-17
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2019-04-12
                            相关资源
                            最近更新 更多