selenium之 富文本框和editor编辑器的处理

在群里经常会遇到有人问文本框的处理,今天有时间,便写一点这方面的经验。

一般输入框有三种:

短的input框,如下:

<input id="zenInput2" class="zenInputDemo" type="text" style="position: static;">
1
textarea框,如下:

<textarea id="message1" name="message1"></textarea>
1
div式的editor框,如下: 


代码见网页源码

也可能是更复杂的iframe的editor,如下: 


代码见网页源码

下面依次看看这几种输入框该怎么解决:

1. input
其实这个只是列在这里,input该如何处理,我想懂点selenium的都知道怎么办。

2.textarea
很简单,定位到元素,直接send_keys就行。

示例网址:http://www.sucaijiayuan.com/api/demo.php?url=/demo/20150325-1

代码:

# -*- coding: utf-8 -*-

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get('http://www.sucaijiayuan.com/api/demo.php?url=/demo/20150325-1')
driver.maximize_window()

driver.switch_to.frame('iframe')

driver.find_element_by_id('message1').send_keys('Hello world!')  # 很简单,直接send_keys就行
sleep(2)

print driver.find_element_by_id('message1').get_attribute('value')

driver.quit()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
结果:

Hello world!
1
3.div式的editor
这种一样,定位到元素div,直接send_keys就行,不过这个send_keys不是到了‘value’属性中,而是在text中。

示例网址:http://www.sucaijiayuan.com/api/demo.php?url=/demo/基于bootstrap的轻量级jQuery文本编辑器插件%20LineControl/index.html

# -*- coding: utf-8 -*-

from selenium import webdriver
from time import sleep


driver = webdriver.Firefox()
driver.get('http://www.sucaijiayuan.com/api/demo.php?url=/demo/%E5%9F%BA%E4%BA%8Ebootstrap%E7%9A%84%E8%BD%BB%E9%87%8F%E7%BA%A7jQuery%E6%96%87%E6%9C%AC%E7%BC%96%E8%BE%91%E5%99%A8%E6%8F%92%E4%BB%B6%20LineControl/index.html')
driver.maximize_window()

driver.switch_to.frame('iframe')

driver.find_element_by_class_name('Editor-editor').send_keys('Hello world again!')  # 没什么区别,也是直接send_keys
sleep(2)

print driver.find_element_by_class_name('Editor-editor').text

driver.quit()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
结果:

Hello world again!
1
4.iframe中的editor
这种是最复杂的一种,但要搞明白了,其实也很简单。

示例网址:http://ueditor.baidu.com/website/examples/completeDemo.html

代码:

# -*- coding: utf-8 -*-

from selenium import webdriver

driver = webdriver.Chrome(executable_path='D:\py\AutoTestFramework\drivers\chromedriver.exe')
driver.get('http://ueditor.baidu.com/website/examples/completeDemo.html')

driver.switch_to.frame('ueditor_0')  # 注意,这种editor一定有frame,一定要切frame

body_string = """Hello world again again!
Hello world again again!
Hello world again again!

Hello world again again!"""

driver.find_element_by_tag_name('body').send_keys(body_string)  # 直接往frame里的body里填内容,是不是很简单粗暴
print driver.find_element_by_tag_name('body').text
driver.quit()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
结果:

Hello world again again!
1
其实frame editor的内容一般都是写在里面的body里,最重要的就是切到frame中去,关于frame的定位于switch,见我的博客: 
selenium之 定位以及切换frame(iframe)

frame中一般是一个空的html,其中显示的内容即是body中的内容。
--------------------- 
作者:huilan_same 
来源:CSDN 
原文:https://blog.csdn.net/huilan_same/article/details/52386274 
版权声明:本文为博主原创文章,转载请附上博文链接!

在使用 Selenium 向 iframe 文本框输入内容时,需要先切换到该 iframe,然后再进行输入操作。下面是一个示例代码: ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 创建浏览器实例 driver = webdriver.Chrome() # 打开网页 driver.get("https://example.com") # 等待 iframe 加载完成 wait = WebDriverWait(driver, 10) iframe = wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID, "iframe_id"))) # 定位文本框元素 rich_text_area = driver.find_element(By.XPATH, "//textarea[@class='rich-text-area']") # 清除原有内容 rich_text_area.clear() # 输入新内容 rich_text_area.send_keys("要输入的内容") # 切换回默认的上下文 driver.switch_to.default_content() # 其他操作... # 关闭浏览器 driver.quit() ``` 在上述代码中,我们首先创建了一个 Chrome 浏览器实例,然后打开了一个网页。接着,我们使用 `WebDriverWait` 等待 iframe 加载完成,并切换到该 iframe。然后,我们通过定位文本框元素的方式找到该元素,并使用 `clear()` 方法清除原有内容。最后,我们使用 `send_keys()` 方法向文本框输入新的内容。完成输入后,可以使用 `switch_to.default_content()` 方法切换回默认的上下文,以便进行其他操作。 请注意,上述代码中的 `iframe_id`、`rich-text-area` 和其他定位方式需要根据实际的网页结构进行调整和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值