Selenium中如何立即执行driver.quit()强制关闭浏览器
Selenium调用driver.quit()强制立即关闭浏览器的解决方法
原因说明
Selenium默认页面加载策略为normal,会等待页面所有静态资源(图片、脚本、样式表等)全部加载完成后,才会执行后续所有WebDriver指令,所以driver.quit()会被阻塞直到页面加载完成才会触发。
解决方案
- 方案1:修改初始化配置,调整页面加载策略
将页面加载策略调整为eager(仅等待DOM树加载完成即可执行指令,不需要等静态资源)或者none(完全不等待页面加载,浏览器返回响应后就立即执行后续指令),配置后driver.quit()就可以直接触发无需等待。
页面加载策略配置仅支持Selenium 3.2及以上版本
Python + Chrome示例:
Java + Chrome示例:from selenium import webdriver from selenium.webdriver.chrome.options import Options opt = Options() opt.page_load_strategy = 'none' # 按需替换为eager也可以 driver = webdriver.Chrome(options=opt)import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.chrome.ChromeDriver; public class Launch { public static void main(String[] args) { ChromeOptions opt = new ChromeOptions(); opt.setPageLoadStrategy("none"); ChromeDriver driver = new ChromeDriver(opt); } } - 方案2:直接强制杀死对应进程
无需依赖WebDriver指令,直接通过系统命令杀掉浏览器和驱动进程,不会被页面加载逻辑阻塞,可立即关闭。
Windows系统Python示例:
Mac/Linux系统Python示例:import os # 强制杀死Chrome进程 os.system("taskkill /f /im chrome.exe /t") # 强制杀死ChromeDriver进程 os.system("taskkill /f /im chromedriver.exe /t")import os # 强制杀死Chrome进程 os.system("pkill -f chrome") # 强制杀死ChromeDriver进程 os.system("pkill -f chromedriver") - 方案3:先关闭所有窗口再执行quit
执行driver.quit()前先遍历所有打开的窗口句柄,逐个调用driver.close()关闭,再执行quit可以避免被加载逻辑阻塞。
示例代码:for handle in driver.window_handles: driver.switch_to.window(handle) driver.close() driver.quit()
内容的提问来源于stack exchange,提问作者user15573857
相关产品推荐
相关产品推荐

