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

Selenium WebDriver无法通过XPATH向TinyMCE编辑器输入文本的问题求助

Selenium WebDriver无法通过XPATH向TinyMCE编辑器输入文本的问题求助

问题描述:

我按照操作步骤编写了脚本,但无法成功向TinyMCE编辑器输入文本,脚本代码如下:

# Wait for the iframe to be present
print("a")
result_frame = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, '_tinymce-rwo3euny6y8_ifr'))
)
# Switch to the iframe
print("b")
driver.switch_to.frame(result_frame)
# Wait for the body inside the iframe to be located
print("c")
mce_edit = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, "//body[@id='tinymce']"))
)
# Send keys to the body element
mce_edit.send_keys("Hello World")

对应的页面HTML结构(按顺序):

<tinymce _ngcontent-krn-c55="" id="my-editor" placeholder="Be detailed and creative in your description to attract a buyer. Do not share your Discord, email, Skype, PayPal, or any other personal information as this violates our safety policy and will result in a suspension." class="ng-untouched ng-pristine ng-invalid">

  <textarea class="tinymce-selector" id="_tinymce-rwo3euny6y8" placeholder="Be detailed and creative in your description to attract a buyer. Do not share your Discord, email, Skype, PayPal, or any other personal information as this violates our safety policy and will result in a suspension." style="display: none;" aria-hidden="true"></textarea>
  
  <iframe id="_tinymce-rwo3euny6y8_ifr" frameborder="0" allowtransparency="true" title="Rich Text Area. Press ALT-0 for help." class="tox-edit-area__iframe"></iframe>
  
  
  <body id="tinymce" class="mce-content-body " data-id="_tinymce-rwo3euny6y8" contenteditable="true" spellcheck="false" style="overflow-y: hidden; padding-left: 15px; padding-right: 15px; min-height: 0px;" data-mce-style="overflow-y: hidden; padding-left: 15px; padding-right: 15px; min-height: 0px;" data-mce-placeholder="Be detailed and creative in your description to attract a buyer. Do not share your Discord, email, Skype, PayPal, or any other personal information as this violates our safety policy and will result in a suspension." aria-placeholder="Be detailed and creative in your description to attract a buyer. Do not share your Discord, email, Skype, PayPal, or any other personal information as this violates our safety policy and will result in a suspension." data-lt-tmp-id="lt-197197" data-gramm="false" xpath="1"><p><br data-mce-bogus="1"></p></body>
  
</tinymce>

我已经尝试了Stack Overflow上的几种解决方案,但都没有效果,希望能得到帮助,谢谢!


解决方案:

从你的代码和HTML结构来看,问题主要出在元素等待条件的选择以及定位策略的稳定性上,下面给你针对性的修复方案:

方案一:优化WebDriver元素交互逻辑

核心修改点:

  • 把presence_of_element_located替换为visibility_of_element_located或element_to_be_clickable,确保元素可见且可交互
  • 避免使用动态生成的ID,改用更稳定的类名定位iframe
  • 操作完iframe后切回主文档,避免影响后续操作

修改后的代码:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 等待TinyMCE的iframe加载并可见(用类名定位,避免动态ID失效)
print("a")
result_frame = WebDriverWait(driver, 15).until(
    EC.visibility_of_element_located((By.CLASS_NAME, 'tox-edit-area__iframe'))
)
# 切换到目标iframe
print("b")
driver.switch_to.frame(result_frame)
# 等待编辑器的body元素可点击(确保可以接收输入)
print("c")
mce_edit = WebDriverWait(driver, 15).until(
    EC.element_to_be_clickable((By.ID, 'tinymce'))
)
# 清空原有内容(可选,根据需求调整)后输入文本
mce_edit.clear()
mce_edit.send_keys("Hello World")
# 切回主文档,防止后续元素定位出错
driver.switch_to.default_content()

方案二:直接调用TinyMCE原生API(更可靠)

如果方案一还是不行,推荐直接使用TinyMCE的JavaScript API来设置内容,这种方法不需要处理iframe切换,兼容性更好:

# 等待TinyMCE实例初始化完成
WebDriverWait(driver, 15).until(
    EC.presence_of_element_located((By.ID, 'my-editor'))
)
# 调用TinyMCE的setContent方法设置编辑器内容
driver.execute_script("tinymce.get('my-editor').setContent('Hello World');")

额外注意事项:

  • 动态ID问题:你代码中使用的_tinymce-rwo3euny6y8_ifr是TinyMCE自动生成的动态ID,页面刷新后会变化,一定要避免用这类ID做定位
  • 等待时间:TinyMCE初始化需要一定时间,把等待时间从10秒延长到15秒会更稳妥
  • 页面上下文:操作完iframe后必须切回主文档,否则后续所有元素定位都会在iframe的上下文里执行,导致找不到主文档的元素

备注:内容来源于stack exchange,提问作者Tandra Wijaya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 12:28:02