selenium对富文本的操作

本文介绍了如何使用Selenium操作网页中的input、textarea及div的editor标签等常见元素,并提供了具体的Python代码示例,包括如何给这些元素赋值以及通过JS获取其内容。

一、input标签

1.input标签是对短文本的操作。如百度首页的输入框<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">。值存在于value中。进入控制界面输入命令

2.给value赋值方法:driver.find_element_by_id("kw").send_keys("baidu可是可是")

二、textarea标签

1.以博客园评论区为例。通过js获取value值

from selenium import webdriver
import time

#实例化ChromeOptions
option = webdriver.ChromeOptions()
#加载用户配置
option.add_argument("--user-data-dir=C:\\Users\\devz400-08\\AppData\\Local\\Google\\Chrome\\User Data")

driver = webdriver.Chrome(chrome_options=option)
driver.maximize_window()
driver.get("https://www.cnblogs.com/simran/p/9259467.html")
time.sleep(2)

#定位评论富文本框
ele_textarea = driver.find_element_by_id("tbCommentBody")
#聚焦
driver.execute_script("arguments[0].focus();",ele_textarea)
time.sleep(2)

#执行js语句
driver.execute_script("arguments[0].value=‘test selenium‘",ele_textarea)
time.sleep(2)
driver.find_element_by_id("btn_comment_submit").click()
time.sleep(5)

driver.quit()

 

 

三、div的editor标签

比如QQ邮箱写邮件,因此这种也采用的是send_keys的方法,只不过这个值不在value属性中,而是在text中

转载于:https://www.cnblogs.com/xiaoxiaolvdou/p/9302020.html

在使用 Selenium富文本编辑器(Rich Text Editor)进行赋值操作时,需要注意富文本编辑器通常是由 `iframe` 或 `contenteditable` 元素实现的,因此不能直接使用 `send_keys()` 方法对编辑器内容进行赋值。以下是几种常见的处理方式: ### 1. 通过 JavaScript 设置 `contenteditable` 元素内容 如果富文本编辑器是基于 `contenteditable` 的 `div` 或 `span` 实现的,可以通过执行 JavaScript 脚本来设置其内容: ```python driver.execute_script("document.querySelector('[contenteditable]').innerHTML = '这是要设置的内容';") ``` 如果编辑器有特定的 ID 或类名,则可以使用更精确的选择器: ```python driver.execute_script("document.getElementById('editor').innerHTML = '这是要设置的内容';") ``` ### 2. 切换到 `iframe` 并设置内容 如果富文本编辑器是通过 `iframe` 实现的,例如 TinyMCE 或 CKEditor,需要先切换到 `iframe`,再操作其文档内容: ```python # 定位 iframe 元素 iframe = driver.find_element(By.TAG_NAME, 'iframe') # 切换到 iframe driver.switch_to.frame(iframe) # 定位 body 元素并设置内容 body = driver.find_element(By.TAG_NAME, 'body') body.clear() body.send_keys('这是要设置的内容') # 切换回主文档 driver.switch_to.default_content() ``` ### 3. 使用 `execute_script` 设置 `iframe` 内容 如果编辑器内容无法通过 `send_keys` 直接输入,可以继续使用 JavaScript 设置 `iframe` 中 `body` 的 `innerHTML`: ```python driver.switch_to.frame(driver.find_element(By.TAG_NAME, 'iframe')) driver.execute_script("document.body.innerHTML = '<p>这是要设置的内容</p>';") driver.switch_to.default_content() ``` ### 4. 针对特定编辑器(如 TinyMCE) 某些富文本编辑器会将内容同步到隐藏的 `textarea` 中。例如 TinyMCE 提供了 `tinyMCE.activeEditor.setContent()` 方法,可以使用 JavaScript 设置内容: ```python driver.execute_script("tinyMCE.activeEditor.setContent('<p>这是要设置的内容</p>');") ``` 如果 `tinyMCE` 对象未全局暴露,可能需要等待编辑器加载完成后再执行脚本: ```python from selenium.webdriver.support.ui import WebDriverWait WebDriverWait(driver, 10).until( lambda d: d.execute_script('return typeof tinyMCE !== "undefined" && tinyMCE.activeEditor != null;') ) driver.execute_script("tinyMCE.activeEditor.setContent('<p>这是要设置的内容</p>');") ``` ### 注意事项 - **等待编辑器加载**:在执行赋值操作前,应使用 `WebDriverWait` 等待编辑器元素加载完成。 - **处理多实例**:如果页面上有多个编辑器实例,需根据实际 DOM 结构选择正确的编辑器对象。 - **避免 `send_keys()` 失败**:部分编辑器在 `iframe` 或 `contenteditable` 元素中不支持 `send_keys()`,此时应优先使用 JavaScript 设置内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值