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

使用Selenium操作WhatsApp输入框遇键盘不可达错误及输入截断问题

解决WhatsApp网页版Selenium输入仅第一个字符及元素不可达问题

问题分析

你遇到的两个问题根源在于定位了错误的输入元素:

  • 仅输入第一个字符:大概率是初始定位的输入框未处于完全可交互状态,或是触发了WhatsApp的输入防抖机制。
  • "Element is not reachable by keyboard"错误:你定位的<span>并非真正接受键盘输入的容器,WhatsApp网页版的输入区域实际是外层带有contenteditable="true"属性的<div>,直接操作内部span会导致元素不可达。

解决方案

  1. 正确定位输入框元素:锁定聊天窗口中带contenteditable="true"的div,这才是真正接收键盘输入的核心元素。
  2. 用显式等待替代固定休眠:显式等待能确保元素处于可交互状态后再执行操作,比Thread.Sleep更稳定可靠。
  3. 直接发送完整消息:无需先输入单个字符再替换,直接向正确的输入框发送完整内容即可。

修正后的代码

using OpenQA.Selenium;
using OpenQA.Selenium.Support.UI;
using System;

// 封装显式等待方法
public static IWebElement WaitForElement(IWebDriver driver, By by, int timeout = 10)
{
    var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeout));
    return wait.Until(d => 
        d.FindElement(by).Displayed && 
        d.FindElement(by).Enabled &&
        d.FindElement(by).GetAttribute("contenteditable") == "true"
    );
}

// 主逻辑
// 搜索目标联系人
IWebElement searchBox = WaitForElement(driver, By.CssSelector(search));
searchBox.SendKeys(Target);

// 点击目标联系人
IWebElement targetContact = WaitForElement(driver, By.XPath($"//span[@title='{Target}']"));
targetContact.Click();

// 定位聊天输入框
IWebElement inputBox = WaitForElement(driver, By.XPath("//div[@contenteditable='true' and @data-tab='10']"));
// 清空输入框(可选,避免残留内容)
inputBox.Clear();
// 发送完整消息
inputBox.SendKeys(message);
// 可选:按下回车发送消息
inputBox.SendKeys(Keys.Enter);

额外说明

  • WhatsApp网页版的class属性会动态更新,用contenteditable="true"+data-tab属性定位,比依赖固定class更稳定。
  • 显式等待能规避页面加载延迟导致的元素未就绪问题,彻底解决固定休眠带来的不稳定问题。

内容的提问来源于stack exchange,提问作者Zaick Killer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:01:08