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
相关产品推荐
相关产品推荐

