C# Selenium发送Emoji报错:ChromeDriver仅支持BMP字符,求正确方案
解决C# Selenium发送Emoji的ChromeDriver异常问题
这个问题我之前调试代码时也踩过坑——ChromeDriver默认只支持BMP(基本多语言平面)的字符,而大部分Emoji属于补充平面字符(比如你用的👍是U+1F44D,不在BMP范围内),直接用SendKeys就会抛出你遇到的那个异常。你之前试的/u1F44D格式也不对,C#里的Unicode转义是\u开头,而且补充平面字符需要拆成代理对才能正确识别,咱们来一步步解决:
方法一:直接使用Emoji字面量或正确的代理对转义
C#支持直接在字符串中写入Emoji字符(只要你的代码文件编码是UTF-8),或者用对应的代理对转义序列:
// 方式1:直接写入Emoji字符 input.SendKeys("👍"); // 方式2:使用代理对转义(U+1F44D对应的代理对是\uD83D\uDC4D) input.SendKeys("\uD83D\uDC4D");
补充说明:补充平面的Unicode字符(编码大于U+FFFF)需要拆分为两个16位的代理字符,你可以通过char.ConvertFromUtf32(0x1F44D)方法快速获取对应的代理对字符串。
方法二:使用Actions类发送字符
有时候直接调用元素的SendKeys会有兼容性问题,改用Actions类的模拟输入往往能解决:
Actions actions = new Actions(driver); actions.SendKeys(input, "👍").Perform();
方法三:复制粘贴兜底方案
如果上面两种方法都不生效,可以用剪贴板+模拟粘贴的方式绕过ChromeDriver的字符限制:
// 将Emoji写入剪贴板 Clipboard.SetText("👍"); // 模拟Ctrl+V粘贴 input.SendKeys(Keys.Control + "v");
额外注意事项
- 确保你的ChromeDriver和Chrome浏览器版本严格匹配,新版本的ChromeDriver对非BMP字符的支持已经优化了很多;
- 如果你需要批量处理Emoji,可以封装一个工具方法,自动把UTF-32编码的Emoji转换为代理对字符串。
内容的提问来源于stack exchange,提问作者delex
相关产品推荐
相关产品推荐

