Python 3.6.4中如何关闭代码打开的浏览器标签(保留浏览器)
Hey there! The webbrowser module is great for quick, one-off tab opens, but as you’ve discovered, it doesn’t expose any APIs to close tabs—it’s a super minimal wrapper that hands off control to your system browser. Let’s walk through practical solutions tailored to your Python 3.6.4 setup, focused strictly on closing tabs your code created while keeping the browser alive:
1. Use Selenium (Most Reliable & Cross-Browser)
Selenium is built for browser automation, so it lets you track and manipulate every tab you open. It’s the most robust option here, especially since you need precision over which tabs to close.
Steps:
- First, install a compatible Selenium version (Python 3.6.4 works best with Selenium 3.x—newer versions drop support for older Python releases):
pip install selenium==3.141.0 - Download the browser driver matching your browser version (e.g., ChromeDriver for Chrome, GeckoDriver for Firefox) and place it in your PATH or specify its path in code.
Example Code:
from selenium import webdriver import time # Initialize browser (Chrome example) driver = webdriver.Chrome(executable_path="path/to/chromedriver.exe") # Open a "persistent" tab to keep the browser alive (e.g., blank page) driver.get("about:blank") persistent_tab = driver.current_window_handle # Open tabs your code needs driver.execute_script("window.open('https://example.com');") driver.execute_script("window.open('https://github.com');") driver.execute_script("window.open('https://stackoverflow.com');") # Wait a bit for tabs to load time.sleep(2) # Close only the tabs your code opened (leave the persistent tab) for tab in driver.window_handles: if tab != persistent_tab: driver.switch_to.window(tab) driver.close() # Switch back to the persistent tab to keep browser running driver.switch_to.window(persistent_tab) # Keep the browser open for your needs (add your logic here) time.sleep(10) # When you're done, close the persistent tab too (optional) driver.quit()
This code explicitly tracks a persistent tab to ensure the browser never closes accidentally, and only shuts down the tabs your script created.
2. Windows-Only: Use pywin32 to Control Browser Windows
If you’re on Windows, you can use the pywin32 library to interact with browser windows directly. This works best if your code opens tabs with identifiable URLs/titles (so you can distinguish them from user-opened tabs).
Steps:
- Install
pywin32:pip install pywin32
Example Code (Chrome):
import win32gui import win32api import win32con import time from webbrowser import open_new_tab # First, open a persistent tab to keep browser alive open_new_tab("about:blank") time.sleep(1) # Open tabs your code needs open_new_tab("https://example.com") open_new_tab("https://github.com") time.sleep(2) # Function to find Chrome windows with matching URL fragments def find_chrome_windows(url_fragment): windows = [] def callback(handle, extra): if "Chrome" in win32gui.GetWindowText(handle): if url_fragment in win32gui.GetWindowText(handle): extra.append(handle) return True win32gui.EnumWindows(callback, windows) return windows # Close each tab we opened for url_fragment in ["example.com", "github.com"]: handles = find_chrome_windows(url_fragment) for handle in handles: # Send close signal to the tab window win32api.SendMessage(handle, win32con.WM_CLOSE, 0, 0) time.sleep(0.5)
Note: This relies on window titles containing the URL, which Chrome does by default. Adjust the window title check if you’re using a different browser.
Why webbrowser Can’t Do This
The webbrowser module is intentionally simple—it just tells the OS to open a URL, but doesn’t track the resulting process or tab. There’s no way to retroactively control tabs opened via it, so switching to a more powerful automation tool like Selenium is the cleanest fix.
内容的提问来源于stack exchange,提问作者Speketwome

