哪里可以找到Python Selenium及WebDriver全量报错信息及原因说明?
Selenium/WebDriver 常见报错汇总及解决方案
所有WebDriver的报错定义都来自W3C WebDriver规范以及各浏览器厂商对driver的自定义扩展逻辑,以下是高频出现的报错整理:
| 报错内容 | 直接触发原因 | 用户侧诱因 | 修复方案 |
|---|---|---|---|
Can not connect to the Service chromedriver | Selenium客户端发起的HTTP请求无法和chromedriver进程建立TCP连接,进程未正常启动或端口被占用 | 1. chromedriver版本和当前Chrome浏览器版本不匹配;2. 系统权限禁止chromedriver执行;3. 端口被其他进程占用;4. 未正确配置chromedriver路径 | 1. 下载与当前Chrome大版本完全匹配的chromedriver;2. 给chromedriver添加可执行权限(Linux/macOS执行chmod +x chromedriver,Windows关闭安全软件拦截);3. 显式指定未被占用的端口启动driver;4. 使用webdriver_manager自动管理driver路径 |
session deleted because of page crash from tab crashed | 浏览器标签页进程崩溃,WebDriver检测到会话关联的标签页不存在,主动销毁会话 | 1. 访问的页面存在内存溢出/恶意代码;2. 系统内存不足导致浏览器进程被系统回收;3. 无界面模式下GPU渲染冲突;4. 主动调用了标签页关闭接口后仍操作该标签页 | 1. 增加系统可用内存,限制同时打开的标签页数量;2. 启动参数添加--disable-gpu、--no-sandbox(无界面模式必加);3. 操作标签页前先校验标签页是否存在;4. 避免访问存在高危漏洞的测试页面 |
DevToolsActivePort file doesn't exist | Chrome启动后未生成DevTools通信的端口标识文件,WebDriver等待超时后抛出错误 | 1. Chrome进程启动失败(比如无root权限时未加--no-sandbox参数);2. 系统临时目录权限不足,Chrome无法写入端口文件;3. Chrome版本和chromedriver版本不兼容 | 1. 无界面/root运行时必须添加--no-sandbox、--disable-dev-shm-usage启动参数;2. 给系统临时目录(默认路径为/tmp)开放读写权限;3. 对齐Chrome和chromedriver的大版本号 |
timeout: Timed out receiving message from renderer: 299.875 | WebDriver向浏览器渲染进程发送指令后,300s内未收到返回响应 | 1. 页面加载资源过大/网络卡顿导致渲染超时;2. 页面存在死循环JS阻塞渲染进程;3. 无界面模式下渲染资源不足 | 1. 显式设置pageLoadStrategy为eager或none,跳过不必要的资源加载;2. 手动调整页面加载超时时间阈值;3. 启动参数添加--disable-extensions、--disable-plugins禁用无关扩展 |
unknown error: cannot activate web view | 移动端WebDriver无法找到并激活指定的webview进程 | 1. 移动端APP未开启webview调试权限;2. webview进程未完全加载就发起操作;3. 存在多个webview进程,未指定正确的进程ID | 1. 检查APP是否将setWebContentsDebuggingEnabled属性设置为true;2. 操作webview前增加等待逻辑,校验webview是否存在;3. 枚举所有可用webview进程,指定对应ID后再操作 |
invalid argument: invalid locator | Selenium定位元素时传入的选择器格式不符合对应定位方式的语法规范 | 1. XPath/CSS选择器语法错误(比如引号不匹配、属性名错误);2. 调用find_element时传入的定位方式参数错误;3. 选择器传入了空值 | 1. 先在浏览器开发者工具中验证选择器是否能正常定位到元素;2. 检查定位方法的参数是否和By类提供的常量一致;3. 增加选择器参数非空校验 |
chrome not reachable | WebDriver和Chrome进程的通信通道完全中断,无法发送任何指令 | 1. Chrome进程被手动关闭/被系统回收;2. 网络代理配置错误导致通信被拦截;3. chromedriver进程意外终止 | 1. 避免手动操作测试用的浏览器窗口;2. 检查启动参数中的代理配置是否正确,必要时添加--no-proxy-server参数;3. 增加进程存活检测逻辑,异常时自动重启driver会话 |
完整的标准错误定义可参考W3C WebDriver规范中的错误码章节,各浏览器自定义的错误可以直接查看对应driver的开源仓库代码中的错误抛出逻辑,所有错误的触发条件都可以在对应源码中找到对应的判断逻辑。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

