如何用Python实现浏览器新标签页后台打开且不抢占当前焦点?
问题
我在工作中监控一批连接到水管的现场记录仪设备,目前无法一次性打开所有记录仪的图表。为避免手动逐个打开,我编写了自动打开图表的程序。由于网站加载较慢,我设置了10秒延迟以确保图表加载完成。但遇到的问题是,当我查看某一图表时,新标签页打开会抢占当前焦点。以下是我的代码:
import webbrowser import pandas as pd import time df = pd.read_excel(r'ids.xlsx', sheet_name=0) idlist = df['ID'].tolist() for i in idlist: print(i) newstring = "Url"+str(i) webbrowser.open(newstring, new=0, autoraise=False) time.sleep(10)
请问是否有办法让新标签页在后台打开,不夺走当前标签页的焦点?
解决方案
webbrowser模块的autoraise=False参数兼容性有限,不同浏览器和系统可能不生效,以下是几个可行方案:
1. 优先调整浏览器设置
这是最简单的解决方法,多数主流浏览器支持设置新标签页后台打开:
- Chrome:设置中搜索“标签页”,开启「从后台打开标签页」选项
- Firefox:进入设置的「标签页」板块,选择「当我打开链接时,在后台打开新标签页」
开启后原代码的webbrowser.open调用就能让新标签页在后台加载,不会抢占当前焦点。
2. 用Selenium控制Chrome实现精准控制
如果浏览器设置无法满足需求,可以用selenium库直接控制Chrome的窗口行为:
from selenium import webdriver from selenium.webdriver.chrome.options import Options import pandas as pd import time # 配置Chrome选项,禁用窗口激活 chrome_options = Options() chrome_options.add_argument("--no-focus-on-open") # 初始化驱动(Selenium 4.6+无需手动下载ChromeDriver) driver = webdriver.Chrome(options=chrome_options) df = pd.read_excel(r'ids.xlsx', sheet_name=0) idlist = df['ID'].tolist() for i in idlist: print(i) new_url = "Url" + str(i) # 执行JS在新标签页打开链接,不切换焦点 driver.execute_script(f"window.open('{new_url}');") time.sleep(10) # 完成后关闭浏览器 # driver.quit()
需要先安装selenium:pip install selenium
3. Windows系统下用PowerShell命令调用
无需额外安装库,通过Windows的PowerShell命令实现后台打开:
import subprocess import pandas as pd import time df = pd.read_excel(r'ids.xlsx', sheet_name=0) idlist = df['ID'].tolist() for i in idlist: print(i) new_url = "Url" + str(i) # 用PowerShell打开链接并最小化窗口,避免抢占焦点 cmd = f"Start-Process '{new_url}' -PassThru | ForEach-Object {{ $_.WaitForInputIdle(); $_.WindowStyle = 'Minimized' }}" subprocess.run(["powershell", "-Command", cmd], shell=True) time.sleep(10)
该方法仅适用于Windows系统,效果取决于浏览器对命令的响应。
内容的提问来源于stack exchange,提问作者Cameron Francis
相关产品推荐
相关产品推荐

