如何将Selenium的JavaScript版sendKeysWithEmojis代码适配为Python版本
Selenium支持Emoji输入的Python版本适配方案
核心实现代码
def send_keys_with_emojis(driver, element, text: str) -> None: 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})); """ driver.execute_script(script, element, text)
如果使用的是异步版本Selenium,可使用以下异步实现:
async def send_keys_with_emojis(driver, element, text: str) -> None: 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 driver.execute_script(script, element, text)
调用示例
同步版本调用:
from selenium.webdriver.common.by import By # 先定位目标输入元素 element = driver.find_element(By.CSS_SELECTOR, "input#test-input") # 可选:清空原有输入内容 element.clear() # 传入带emoji的内容完成输入 send_keys_with_emojis(driver, element, '🚀😀 This one shall pass 🚀😀')
异步版本调用:
from selenium.webdriver.common.by import By # 先定位目标输入元素 element = await driver.find_element(By.CSS_SELECTOR, "input#test-input") # 可选:清空原有输入内容 await element.clear() # 传入带emoji的内容完成输入 await send_keys_with_emojis(driver, element, '🚀😀 This one shall pass 🚀😀')
说明
- 该方案通过直接执行JavaScript操作DOM、触发输入事件完成内容填充,绕过了Selenium原生
send_keys方法的emoji编码兼容问题 - 支持所有可执行JavaScript的Selenium运行环境,无需额外依赖
- 如遇内容未追加成功的情况,可检查目标元素是否为可输入的原生表单元素,非常规输入组件可根据场景调整JS逻辑中赋值的属性(比如
textContent替代value)
内容的提问来源于stack exchange,提问作者The Dan
相关产品推荐
相关产品推荐

