Selenium浏览器无法启动,进程无响应阻塞Eventlet服务
问题排查与解决方案
定位阻塞点:在初始化浏览器的代码前后加调试打印,确认是否卡在
seleniumwire.undetected_chromedriver.Chrome()实例化步骤。比如:print("About to initialize Chrome driver") driver = seleniumwire.undetected_chromedriver.Chrome() print("Chrome driver initialized successfully")这样能明确是启动代码本身卡住,还是后续逻辑问题。
核对版本兼容性:确保
seleniumwire、undetected-chromedriver和本地Chrome浏览器版本完全匹配。比如Chrome 120对应undetected-chromedriver 3.5.6,版本不匹配大概率会导致无响应启动失败,直接升级或降级对应包即可。排查DEV环境变量干扰:既然只有DEV模式下出问题,检查DEV环境中是否有代理配置、端口占用或额外的调试参数冲突。可以临时关闭DEV环境变量启动项目,看浏览器能否正常运行,逐步排查DEV模式下的特殊配置。
解决Eventlet协程冲突:Eventlet的协程补丁可能和selenium的阻塞操作冲突。可以调整monkey patch的范围,或者单独用协程启动浏览器进程:
import eventlet # 只patch必要模块,避免影响selenium eventlet.monkey_patch(socket=True, select=True) def init_browser(): global driver driver = seleniumwire.undetected_chromedriver.Chrome() # 用非阻塞协程启动浏览器 eventlet.spawn_n(init_browser)调整Chrome启动参数:undetected_chromedriver的默认参数可能和你的环境不兼容,试试添加基础启动参数:
options = seleniumwire.undetected_chromedriver.ChromeOptions() options.add_argument("--no-sandbox") # 解决Linux环境下权限问题 options.add_argument("--disable-dev-shm-usage") # 避免内存不足导致的卡死 options.add_argument("--headless=new") # 先测试无头模式是否能启动,排除UI渲染问题 driver = seleniumwire.undetected_chromedriver.Chrome(options=options)清理残留进程:之前无响应的Chrome或chromedriver进程可能占用资源,导致新进程无法启动,手动清理:
# Windows系统 taskkill /F /IM chrome.exe /IM chromedriver.exe # Linux/macOS系统 pkill -f chrome pkill -f chromedriver
内容的提问来源于stack exchange,提问作者Alin Dan
相关产品推荐
相关产品推荐

