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

Python Selenium如何实现每个启动的WebDriver每30秒自动关闭

问题调整方案

原有代码存在几处核心问题导致无法实现多浏览器并行启动、单浏览器满30秒自动关闭的需求:

  • 代码默认串行执行web函数,无法同时启动多个浏览器
  • option对象未初始化,且所有浏览器共用同一个option实例,会导致配置冲突
  • 代理读取逻辑错误,仅读取了proxies.txt的第一行代理
  • 关闭逻辑顺序错误,启动后先关闭了标签页,等待30秒才退出浏览器,不符合启动后满30秒关闭的要求
  • 打开目标地址的方式存在转义字符错误,无需用window.open,直接get访问即可
import time
import threading
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

# 读取全局配置
with open('configure.txt','r') as f:
    config = f.readlines()
    target_url = config[0].strip('\n').split('|')[1].strip(' ')
    run_count = int(config[1].strip('\n').split('|')[1].strip(' '))

# 读取所有代理
with open('proxies.txt','r') as f:
    proxy_list = [line.strip() for line in f.readlines() if line.strip()]

def web(proxy):
    # 每个浏览器单独初始化option
    option = webdriver.ChromeOptions()
    # 配置代理
    option.add_argument(f'--proxy-server={proxy}')
    # 启动浏览器
    driver = webdriver.Chrome(ChromeDriverManager().install(), options=option)
    try:
        # 访问目标地址
        driver.get(target_url)
        # 持续运行30秒
        time.sleep(30)
    finally:
        # 无论是否异常都关闭浏览器
        driver.quit()

if __name__ == '__main__':
    thread_list = []
    # 启动对应数量的线程,每个线程对应一个浏览器
    for idx in range(run_count):
        # 循环使用代理列表的代理
        proxy = proxy_list[idx % len(proxy_list)]
        t = threading.Thread(target=web, args=(proxy,))
        thread_list.append(t)
        t.start()
    # 等待所有浏览器执行完毕
    for t in thread_list:
        t.join()
核心调整说明
  • 引入threading多线程模块,每个浏览器对应一个独立线程,实现多个浏览器同时运行
  • 每个浏览器实例单独初始化ChromeOptions对象,避免配置互相干扰
  • 修正代理读取逻辑,加载proxies.txt中所有代理,循环分配给不同浏览器
  • 调整关闭逻辑,浏览器启动访问目标地址后等待30秒,直接调用quit方法完整关闭浏览器进程
  • 修正目标地址打开方式,直接用driver.get访问,避免window.open带来的标签页管理问题
  • 增加try-finally结构,确保浏览器进程无论是否出现异常都能正常关闭,避免残留后台进程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:39:04