You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Selenium用Service初始化驱动后测试自动关闭如何解决

问题描述
  • 原脚本直接指定chromedriver.exe路径初始化驱动时,可正常运行至触发Listings下拉菜单步骤;该写法触发弃用警告后,改为通过Service对象结合webdriver_manager的ChromeDriverManager方式初始化ChromeDriver
  • 修改初始化逻辑后运行测试,脚本直接自动关闭,无法执行后续点击「My Listings」的操作;已确认WebDriver Manager拉取的是匹配本机Chrome 102.0.5005版本的对应chromedriver,驱动缓存路径识别正常,问题仍存在
  • 需确认当前代码写法是否存在错误,获取问题的正确解决方式
原测试代码
import os
from selenium.webdriver.chrome.service import Service
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.maximize_window()
driver.get("https://christiesre.crm.gabriels.net/")
driver.implicitly_wait(30)
listings_dropdown = driver.find_element(by=By.LINK_TEXT, value = "Listings")
listings_dropdown.click()

my_listings = driver.find_element(by=By.LINK_TEXT, value = "My Listings")
my_listings.click()
运行时WebDriver Manager日志
[WDM] - ====== WebDriver manager ======
[WDM] - Current google-chrome version is 102.0.5005
[WDM] - Get LATEST chromedriver version for 102.0.5005 google-chrome
[WDM] - Driver [C:\Users\cehu\.wdm\drivers\chromedriver\win32\102.0.5005.61\chromedriver.exe] found in cache
问题原因与修复方案

驱动初始化写法本身没有语法错误,浏览器自动关闭、后续操作无法执行的核心原因有两个:

  1. Selenium 4版本的资源回收逻辑更严谨,脚本执行完所有代码、或中途抛出未捕获的异常时,Python进程退出会自动调用driver.quit()关闭浏览器;旧版本Selenium存在资源回收延迟,所以之前没出现过自动关闭的现象,不代表旧逻辑更合理。
  2. 代码中虽然导入了显式等待相关的依赖,但实际没有使用:全局隐式等待和动态下拉菜单的加载逻辑适配性差,点击Listings下拉后,「My Listings」选项需要短暂时间才会渲染为可点击状态,直接定位元素会触发ElementNotInteractableException或NoSuchElementException,未捕获的异常会直接终止脚本,触发浏览器自动关闭。

具体修复操作如下:

  • 新增Chrome启动项detach,配置为True后,脚本执行完毕不会自动关闭浏览器
  • 删除全局的implicitly_wait(30)配置,避免隐式等待和显式等待混用导致的等待时长混乱问题
  • 点击Listings下拉后,用显式等待等「My Listings」元素变为可点击状态后,再执行点击操作

修复后的可运行代码:

from selenium.webdriver.chrome.service import Service
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

# 配置启动选项,执行完不自动关闭浏览器
options = webdriver.ChromeOptions()
options.add_experimental_option("detach", True)

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
driver.maximize_window()
driver.get("https://christiesre.crm.gabriels.net/")

listings_dropdown = WebDriverWait(driver, 30).until(
    EC.element_to_be_clickable((By.LINK_TEXT, "Listings"))
)
listings_dropdown.click()

# 等待下拉选项加载完成可点击后再操作
my_listings = WebDriverWait(driver, 30).until(
    EC.element_to_be_clickable((By.LINK_TEXT, "My Listings"))
)
my_listings.click()

内容的提问来源于stack exchange,提问作者cehuu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 16:03:32