我正在自动化whatsapp消息,并希望通过tkinter窗口发送出去。在此tkinter窗口中,我借助.label()创建了一个消息框,并能够通过硒连接到whatsapp网站。
当前,我已经可以发送消息了,但是没有表情符号。包含表情符号时,出现此错误“ Chromedriver仅支持BMP中的字符”。如何添加表情符号?
答案 0 :(得分:2)
此错误消息...
selenium.common.exceptions.WebDriverException: Message: unknown error: ChromeDriver only supports characters in the BMP
...表示 ChromeDriver 无法通过send_keys()
方法发送表情符号信号。
ChromeDriver only supports characters in the BMP是 Chromium 团队的一个已知问题,因为{em> ChromeDriver 在FFFF
之后仍然不支持Unicode字符。因此,无法通过ChromeDriver发送FFFF
之后的任何字符。结果,任何尝试发送 SMP 字符(例如 CJK , Emojis , Symbols 等)的尝试都会引发错误
可能的替代方法是使用 GeckoDriver / Firefox 。
代码块:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox(executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe')
driver.get('https://www.google.com/')
# Chineese Character
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.NAME, "q"))).send_keys("?")
# Emoji Character
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.NAME, "q"))).send_keys("?")
浏览器快照:
Issue 2269: Impossible to add special characters with a unicode after FFFF
一些链接:
答案 1 :(得分:2)
对于那些想在Chrome上发送表情符号的人
解决方案
async sendKeysWithEmojis(element, text) {
const script = `var elm = arguments[0],
txt = arguments[1];elm.value += txt;
elm.dispatchEvent(new Event('keydown', {bubbles: true}));
elm.dispatchEvent(new Event('keypress', {bubbles: true}));
elm.dispatchEvent(new Event('input', {bubbles: true}));
elm.dispatchEvent(new Event('keyup', {bubbles: true}));`;
await this.driver.executeScript(script, element, text);
}
这样称呼
const element = await this.driver.findElement(selector);
await sendKeysWithEmojis(element, '?? This one shall pass ??');
这是怎么回事? 我们正在使用事件模拟本地按键
请注意,{bubbles: true}
是可选的(由于复杂的包装输入,我需要这样做)
答案 2 :(得分:2)
它对我有用:
from selenium import webdriver
JS_ADD_TEXT_TO_INPUT = """
var elm = arguments[0], txt = arguments[1];
elm.value += txt;
elm.dispatchEvent(new Event('change'));
"""
browser = webdriver.Chrome('C:\\Python37\\chromedriver.exe')
browser.get("https://google.com/")
elem = browser.find_element_by_name('q')
text = "? ? " + u'\u2764'
browser.execute_script(JS_ADD_TEXT_TO_INPUT, elem, text)