Mal*_*eck 10 python selenium google-chrome emoji selenium-chromedriver
我正在自动化 whatsapp 消息,并希望通过 tkinter 窗口将它们发送出去。在这个 tkinter 窗口中,我在 .label() 的帮助下创建了一个消息框,我能够通过 selenium 连接到 whatsapp 网络。
目前,我已经能够发送消息,但没有表情符号。当我包含表情符号时,出现此错误“Chromedriver 仅支持 BMP 中的字符”。如何包含表情符号?
这个错误信息...
selenium.common.exceptions.WebDriverException: Message: unknown error: ChromeDriver only supports characters in the BMP
Run Code Online (Sandbox Code Playgroud)
...暗示ChromeDriver无法通过方法发送表情符号信号send_keys()。
ChromeDriver 仅支持 BMP中的字符是Chromium团队的一个已知问题,因为ChromeDriver仍然不支持FFFF. 因此不可能FFFF通过 ChromeDriver发送任何字符。因此,任何发送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("")
Run Code Online (Sandbox Code Playgroud)
浏览器快照:
您可以在OpenQA.Selenium.WebDriverException: 'unknown error: ChromeDriver only supports characters in the BMP while sent an emoji through C# Selenium 中找到相关讨论
几个链接:
这个对我有用:
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)
Run Code Online (Sandbox Code Playgroud)
小智 7
复制并粘贴!通过将文本复制到剪贴板,然后将其粘贴到元素中,可以很容易地解决这个问题。

import pyperclip
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("https://google.com")
title = driver.title
assert title == "Google"
driver.implicitly_wait(0.5)
search_box = driver.find_element(by=By.NAME, value="q")
pyperclip.copy("Hi This is a test message ! ")
act = ActionChains(driver)
act.key_down(Keys.CONTROL).send_keys("v").key_up(Keys.CONTROL).perform()
Run Code Online (Sandbox Code Playgroud)
对于那些想要在 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);
}
Run Code Online (Sandbox Code Playgroud)
像这样称呼它
const element = await this.driver.findElement(selector);
await sendKeysWithEmojis(element, ' This one shall pass ');
Run Code Online (Sandbox Code Playgroud)
这里发生了什么? 我们正在使用事件模拟本机按键
请注意,它{bubbles: true}是可选的(由于复杂的包装输入,在我的情况下需要)
| 归档时间: |
|
| 查看次数: |
7653 次 |
| 最近记录: |