将Bot函数放入循环后,Selenium脚本二次迭代报Webdriver路径错误
问题原因分析
第二次迭代报错的核心是第二次执行applying_bot时,WebDriver的初始化逻辑出了问题,常见触发场景:
- 你在
applying_bot里调用了driver.quit()销毁了驱动进程,但下次初始化时没有明确指定webdriver可执行文件的路径,仅依赖环境变量时可能出现路径失效的情况; - 把webdriver的初始化代码写在了定时任务外部,导致第二次调用时驱动实例已失效;
- 脚本运行过程中环境变量
PATH被意外修改,丢失了webdriver的路径。
解决方案
方案1:每次初始化Driver时明确指定路径
不要依赖环境变量,每次创建driver实例时直接用参数指定可执行文件路径,彻底避免路径问题:
from selenium import webdriver def applying_bot(target_page): # 替换为你本地的webdriver路径,比如ChromeDriver driver = webdriver.Chrome(executable_path="/usr/local/bin/chromedriver") try: # 你的bot业务逻辑:打开页面、元素操作等 driver.get(target_page) # ...其他操作代码 finally: # 确保任务结束后关闭驱动 driver.quit()
方案2:复用Driver实例(适合短周期重复操作)
如果你的定时任务不需要每次重启浏览器,可以把driver初始化放在循环外部,避免重复创建销毁实例:
from selenium import webdriver import schedule import time if __name__ == '__main__': # 提前初始化driver,指定路径 driver = webdriver.Chrome(executable_path="/usr/local/bin/chromedriver") def applying_bot(target_page): # 复用已有的driver实例 driver.get(target_page) # ...你的操作逻辑 schedule.every(1).minute.do(applying_bot, target_page) try: while True: schedule.run_pending() time.sleep(1) finally: # 程序终止时统一关闭driver driver.quit()
注意:这种方式长时间运行可能出现内存泄漏或页面状态异常,适合简单、短周期的任务场景。
方案3:用Selenium 4.x+的Service类管理驱动
如果使用Selenium 4及以上版本,推荐用Service类来管理驱动,初始化逻辑更稳定:
from selenium import webdriver from selenium.webdriver.chrome.service import Service def applying_bot(target_page): service = Service("/usr/local/bin/chromedriver") driver = webdriver.Chrome(service=service) try: driver.get(target_page) # ...操作逻辑 finally: driver.quit()
额外检查项
- 确认webdriver版本和浏览器版本完全匹配,版本不兼容也可能触发初始化错误;
- 可以在
applying_bot开头打印环境变量PATH,确认第二次执行时路径是否包含webdriver目录:
import os def applying_bot(target_page): print(os.environ.get("PATH")) # 检查路径是否正常 # ...后续初始化逻辑
内容的提问来源于stack exchange,提问作者zakaria oubaid
相关产品推荐
相关产品推荐

