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

Python中如何同时运行多个Selenium WebDriver?多进程调用异常排查

问题分析与解决方法

你的核心问题是在主进程中创建的Selenium WebDriver实例无法跨进程传递,这也是enterPoint函数没有执行(无输出)的原因:

  • 多进程间是完全隔离的内存空间,WebDriver实例与创建它的进程绑定,且无法被序列化(pickle)后传递给子进程。
  • 你在主进程循环创建driver,再通过apply_async的args传给子进程,这会导致子进程无法正常接收并使用driver,进而函数无法执行。

修正方案

把WebDriver的创建逻辑移到子进程内部,也就是在enterPoint函数里调用setProxy生成driver,而非在主进程创建后传递。同时注意Windows系统下多进程的启动规范(必须用if __name__ == '__main__'包裹主逻辑)。

修改后的代码示例

from multiprocessing import Pool

def enterPoint(thread, proxy, accounts):
    # 子进程内部创建driver
    driver = setProxy(proxy, thread)
    print(f'{thread}: I exist!')
    try:
        for account in accounts:
            cEEPE(thread, driver, account)
    finally:
        # 确保进程结束时关闭driver,避免残留进程
        driver.quit()

def main():
    pool = Pool()
    for i in range(len(master)):
        thread_name = f'Thread#{i+1}'
        # 传递proxy和账号数据,而非已创建的driver实例
        pool.apply_async(enterPoint, args=(thread_name, proxy, master[i]))
    pool.close()
    pool.join()

if __name__ == '__main__':
    # 假设master和proxy是你已定义的变量
    master = [...]
    proxy = ...
    main()

额外说明

  • 每个子进程独立创建driver实例,避免进程间资源冲突,符合Selenium的运行逻辑。
  • 加入try...finally块确保driver在任务完成后被正确关闭,防止后台残留chromedriver进程。
  • Windows系统下,多进程代码必须放在if __name__ == '__main__'块中,否则会触发进程重复启动的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:20:45