异常捕获后调用driver.execute_script()报错,直接写代码正常的问题求助
解决思路
1. 排查变量作用域
- 确认
ScriptSiCrashLogin变量是否在异常处理块的作用域内。如果变量是在try块内部(比如循环里)定义的,except块无法访问该变量,就会导致调用失败——直接写代码则不受作用域限制。 - 解决:将
ScriptSiCrashLogin的定义移至try块之外,确保整个代码流程都能访问到该变量。
2. 检查字符串格式一致性
- 用变量存储JS脚本时,可能存在转义错误、换行/缩进处理不当的问题。比如直接写代码时用了三引号包裹多行脚本,但变量赋值时未正确使用三引号,导致脚本被截断或格式混乱。
- 解决:
- 用三引号包裹变量赋值的JS脚本,示例:
ScriptSiCrashLogin = """ // 你的完整JS代码 document.getElementById('username').value = 'your_account'; document.getElementById('password').value = 'your_pwd'; document.querySelector('button[type="submit"]').click(); """ - 打印
ScriptSiCrashLogin的内容,与直接写入异常块的代码逐行对比,排查是否存在引号不匹配、分号缺失、换行丢失等差异。
- 用三引号包裹变量赋值的JS脚本,示例:
3. 确认变量未被意外修改
- 检查循环过程中是否有代码意外修改了
ScriptSiCrashLogin的值(比如重新赋值、清空),导致异常触发时变量内容已不是原始脚本。 - 解决:在异常块执行
driver.execute_script前,先打印ScriptSiCrashLogin的内容,或在循环中添加日志监控变量值的变化。
4. 排查编码与隐藏字符问题
- 即使代码内容看起来一致,变量存储的字符串可能存在不可见的编码字符,导致执行失败。
- 解决:
- 将直接写在异常块中的代码复制出来,重新赋值给
ScriptSiCrashLogin,确保完全一致。 - 使用
repr(ScriptSiCrashLogin)打印变量的原始字符串表示,对比直接写的代码的repr结果,排查隐藏差异。
- 将直接写在异常块中的代码复制出来,重新赋值给
内容的提问来源于stack exchange,提问作者Hyaku
相关产品推荐
相关产品推荐

