You need to enable JavaScript to run this app. Selenium运行Python自动化代码报错「'value' must be a single Unicode code point」怎么办?
优惠活动
大模型
产品
解决方案
定价
更多

Selenium运行Python自动化代码报错「'value' must be a single Unicode code point」怎么办?

报错原因与修复方案

核心错误点

  • 传入send_keys()的参数类型不满足要求:执行line.split("\n")后返回的是列表结构,并非单个字符串。Selenium的按键输入方法要求传入的内容必须是单个Unicode字符串或特殊按键常量,传入列表就会触发'value' must be a single Unicode code point的参数校验报错。
  • 递归逻辑位置错误:在for循环遍历每一行的内部直接调用Check(),会触发无限递归,既无法完整遍历test.txt的全部内容,还会造成函数调用栈溢出。
  • 组合键实现逻辑错误:每执行一步按键就重新初始化ActionChains对象,会中断Ctrl按键的按下状态,导致Ctrl+Z的组合键无法正常触发撤销操作。
  • 文件读取操作存在泄漏风险:手动open/close文件的方式,一旦读取过程出现异常就会导致文件句柄长期被占用。

修正后的代码示例

from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
import time

def Check():
    # 用上下文管理器安全读取文件,自动处理文件关闭逻辑
    with open("test.txt", "r", encoding="utf-8") as afile:
        # 预处理所有行:去掉首尾换行符,过滤空行
        lines = [line.strip() for line in afile.readlines() if line.strip()]

    for line in lines:
        # 单个ActionChains对象完成全部连贯按键操作,保证按键状态不中断
        actions = ActionChains(driver)
        # 直接传入单行字符串执行输入,不再传入split得到的列表
        actions.send_keys(line)
        actions.pause(1)
        actions.send_keys(Keys.ENTER)
        actions.pause(1)
        # 连贯执行三次Ctrl+Z撤销操作
        actions.key_down(Keys.LEFT_CONTROL)
        actions.send_keys('z')
        actions.pause(1)
        actions.send_keys('z')
        actions.pause(1)
        actions.send_keys('z')
        actions.key_up(Keys.LEFT_CONTROL)
        actions.perform()

# 函数仅在外层调用一次,避免循环内部递归导致的无限调用
Check()

修改效果说明

  • 传入send_keys()的参数从列表替换为纯字符串,直接解决抛出的InvalidArgumentException错误。
  • 用key_down/key_up维护Ctrl键的按下状态,保证三次撤销操作可以正常触发。
  • 移除循环内部的递归调用,让函数可以按顺序遍历完文本所有行后正常退出,不会触发栈溢出。
  • 用上下文管理器读取文件,避免文件句柄泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 23:45:05