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

如何使用C# Selenium向非Input可编辑P元素执行SendKeys操作?

解决向非Input的Contenteditable字段输入文本的问题

针对你遇到的WordPress块编辑器中可编辑段落(contenteditable="true"的<p>标签)无法用SendKeys输入文本的问题,提供以下两种可靠解决方案:

一、优化定位+聚焦后输入

绝对XPath极易因页面结构变化失效,先改用稳定的属性定位元素,再确保元素聚焦并清空原有内容后输入:

string text = "<!-- wp:table -->\n<figure class=\"wp-block-table\">";
// 使用contenteditable属性+aria-label定位,避免依赖动态ID
var editablePara = drv.FindElement(By.XPath("//p[@contenteditable='true' and @aria-label='Absatz-Block']"));

// 点击聚焦元素,全选并删除原有内容
editablePara.Click();
editablePara.SendKeys(Keys.Control + "a");
editablePara.SendKeys(Keys.Delete);

// 输入目标文本
editablePara.SendKeys(text);

二、用JavaScript直接注入内容(更可靠)

部分富文本编辑器对SendKeys支持不佳,可通过IJavaScriptExecutor直接修改元素内容,绕过编辑器的输入拦截:

string text = "<!-- wp:table -->\n<figure class=\"wp-block-table\">";
var editablePara = drv.FindElement(By.XPath("//p[@contenteditable='true' and @aria-label='Absatz-Block']"));

// 转换为JS执行器,设置元素innerHTML(保留HTML格式)
IJavaScriptExecutor js = (IJavaScriptExecutor)drv;
js.ExecuteScript("arguments[0].innerHTML = arguments[1];", editablePara, text);

// 若只需纯文本,改用textContent:
// js.ExecuteScript("arguments[0].textContent = arguments[1];", editablePara, text);

原代码失败的可能原因

  1. 绝对XPath过于脆弱,页面结构稍有变动就会定位失败;
  2. 元素未聚焦,SendKeys的输入未被编辑器捕获;
  3. 原有内容未清空,输入的文本被追加到不可见区域。

内容的提问来源于stack exchange,提问作者Loki wind.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:57:04