使用Selenium的send_keys随机发送含表情文本报错求助
解决ChromeDriver发送非BMP表情报错的问题
问题原因
你遇到的报错是因为旧版本ChromeDriver仅支持**基本多语言平面(BMP)字符,而列表里的部分表情(比如🌞、🌅等)属于补充多语言平面(SMP)**字符,超出了旧版ChromeDriver的支持范围。直接写字符串时,部分表情可能被编辑器或Python自动处理为BMP兼容形式,但从列表调用随机值时没有这个处理,导致触发报错。
解决方案
方案1:升级Chrome和ChromeDriver到最新版本
新版ChromeDriver已修复SMP字符支持问题,升级后可直接使用原有代码:
textbox = driver.find_element(By.XPATH, textbox_xpath) textbox.send_keys(random.choice(gm) + Keys().ENTER)
方案2:通过剪贴板粘贴绕过限制
如果暂时无法升级,可借助系统剪贴板复制文本,再模拟粘贴操作:
import random import pyperclip from selenium.webdriver.common.keys import Keys gm = [ 'Good morning 🌞', 'Good morning ☀️', 'Good morning ⛅', 'Good morning 🌅', 'Good morning 🌄', 'Good morning 🌻', 'Good morning ⛅', 'Good morning 🌥️', 'Good morning 🌤️', 'Good morning ☕', ] textbox = driver.find_element(By.XPATH, textbox_xpath) # 随机选文本并复制到剪贴板 selected_text = random.choice(gm) pyperclip.copy(selected_text) # 模拟Ctrl+V粘贴,再按回车发送 textbox.send_keys(Keys.CONTROL, 'v') textbox.send_keys(Keys.ENTER)
使用前需安装pyperclip库:pip install pyperclip
方案3:替换列表中的SMP表情为BMP兼容表情
将列表里的非BMP表情替换为BMP内的等价表情(比如用☀️代替🌞),但这种方法会限制表情种类,仅作为临时应急方案。
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

