为何Selenium代码仅打开同一Chrome窗口标签?如何开启两个独立窗口
问题原因
你使用uc.Chrome(undetected-chromedriver)创建多个实例时,默认会复用同一个Chrome的用户数据目录,导致新的driver直接附加到已有窗口打开标签页,而非启动独立窗口——Chrome依靠用户数据目录区分不同会话,共享目录就会共用同一个会话环境。
解决方法
给每个driver实例指定独立的用户数据目录,彻底隔离会话:
import tempfile from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager import undetected_chromedriver as uc link = "你的目标链接" # 第一个窗口:创建专属临时用户目录 temp_dir_0 = tempfile.mkdtemp() options_0 = uc.ChromeOptions() options_0.add_argument("--disable-extensions") options_0.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36") options_0.add_argument(f"--user-data-dir={temp_dir_0}") driver_0 = uc.Chrome(service=Service(ChromeDriverManager().install()), options=options_0) driver_0.get(link) # 第二个窗口:使用另一个独立临时目录 temp_dir_1 = tempfile.mkdtemp() options_1 = uc.ChromeOptions() options_1.add_argument("--disable-extensions") options_1.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36") options_1.add_argument(f"--user-data-dir={temp_dir_1}") driver_1 = uc.Chrome(service=Service(ChromeDriverManager().install()), options=options_1) driver_1.get(link)
额外技巧:可以给每个配置添加--new-window参数,进一步确保打开新窗口,但核心还是靠独立用户目录保证会话隔离:
options.add_argument("--new-window")
注意事项
- 临时目录会保留在系统中,程序结束后可以通过
shutil.rmtree(temp_dir_0)和shutil.rmtree(temp_dir_1)手动清理。 - 不要复用同一个
ChromeOptions对象,每个driver单独创建配置,避免参数共享导致的会话复用问题。
内容的提问来源于stack exchange,提问作者E-man
相关产品推荐
相关产品推荐

