You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 18:24:03