4

Selenium4+Python3系列(八) - Cookie、截图、单选框及复选框处理、富文本框、日历控...

 1 year ago
source link: https://blog.51cto.com/u_15009374/5884094
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

我所在的城市昨天出了近20+的阳性案例,但这丝毫没有 “影响” 到996的工作时间,当然,也没有影响到我想继续更新文章的决心。

一、cookie常用操作入门

上一篇有写过关于cookie的实战案例,个人觉得没有很好地照顾到入门同学的感受,所以就又更新了关于cookie的基本使用操作。

1、获取所有cookie信息

示例代码:

cookies = driver.get_cookies()
for cookie in cookies:
    #### 遍历cookie
    print(cookie)

print('集合长度:' + str(len(cookies)))

2、删除所有cookie信息

示例代码:

driver.delete_all_cookies()
cookies = driver.get_cookies()
print('删除后cookies集合长度:' + str(len(cookies)))

3、添加cookie

和JSON很像,必须有name和value值,python叫字典,示例代码:

cookie = {'name': 'login', 'value': 'true'}
driver.add_cookie(cookie)

4、获取指定名称的cookie信息

示例代码:

login_cookie = driver.get_cookie('login')
print('取出刚添加的cookie值: ' + str(login_cookie))

5、删除指定名称的cookie信息

示例代码:

driver.delete_cookie("login")
cookies = driver.get_cookies()
#删除login后,应该就没cookie了
print(cookies)

二、截图操作

1、获取当前屏幕截图,使用完整路径,文件名以时间命名

示例代码:

nowTime = time.strftime("%Y%m%d%H%M%S")
driver.get_screenshot_as_file('%s.png' % nowTime)

2、保存屏幕截图

示例代码:
driver.save_screenshot("testbaidu.png")

3、获取当前屏幕截图base64编码字符串

示例代码:

driver.save_screenshot("testbaidu.png")
print(driver.get_screenshot_as_base64())

4、获取当前屏幕截图的二进制文件数据

示例代码:

print(driver.get_screenshot_as_png())

三、单选框及复选框处理

判断是否选中:is_selected(),有时单选框、复选框会有默认选中的情况,那么有必要在操作单选框或者复选框的时候,先判断选项框是否为选中状态。使用element.is_selected()来获取元素是否为选中状态,返回结果为布尔类型,如果为选中状态返回True,如果未选中返回为False

至于操作就不必多说了,对大家来讲是So Easy,就点击就可以了。

1、单选框

示例代码;


**# 获取第1个单选框李白元素对象
element = driver.find_element(By.CSS_SELECTOR,"[value='0']")
isSelected = element.is_selected()
# 查看李白是否被选中
if  isSelected:
    print('李白已被选中,你只能选下一个英雄了')

# 获取第3个单选框露娜元素对象
element = driver.find_element(By.CSS_SELECTOR,"[value='2']")
# 判断是否被选中
if not element.is_selected():
    # 如果未被选中,就可以直接选了
    element.click()**

2、复选框

具体实例代码如下:

# 获取第三个复选框公孙离元素对象
element = driver.find_element(By.NAME, "checkbox3")
isSelected = element.is_selected()
# 如果选中取消选中
if isSelected:
    element.click()

# 全选操作
elements = driver.find_elements(By.CSS_SELECTOR, "[type='checkbox']")
# 遍历选项
for element in elements:
    # 点击选中
    element.click()

四、富文本框操作

1、什么是富文本编辑器?

富文本编辑器,Rich Text Editor, 简称 RTE, 是一种可内嵌于浏览器,所见即所得的文本编辑器。

具体长啥样,如下图:

Selenium4+Python3系列(八) - Cookie、截图、单选框及复选框处理、富文本框、日历控件操作_示例代码

2、通过键盘事件操作富文本

通过Tab键,先移到富文本框中,自己需要提前数好需要按几下tab,才能介入,多写几个tab,也无妨,因为只有进入富文本,tab相当于缩进了。
示例代码如下:

action=ActionChains(driver)
# 鼠标通过tab要先移到富文本框中(自己需要提前数好需要按几下tab,才能介入,多写几个tab,也无妨,因为只有进入富文本,tab相当于缩进了)
for i in range(1,18):
    action.send_keys(Keys.TAB).perform()
    time.sleep(1)

action.send_keys("欢迎关注公众号:软件测试君").perform()

3、通过进入iframe实现操作富文本

示例代码如下:

driver.implicitly_wait(30)
# 进入富文本编辑器
driver.switch_to.frame("ueditor_0")
time.sleep(2)
driver.find_element(By.CSS_SELECTOR, ".view").click()
time.sleep(2)
# 输入文字
driver.find_element(By.CSS_SELECTOR, "[contenteditable='true']").send_keys("欢迎关注公众号:软件测试君")
time.sleep(2)
# 选中全部
driver.find_element(By.CSS_SELECTOR, ".view").send_keys(Keys.CONTROL + "a")
time.sleep(2)
# 跳出富文本编辑器
driver.switch_to.default_content()
# 加粗操作
driver.find_element(By.CSS_SELECTOR,".edui-for-bold .edui-icon").click()

4、通过执行js实现富文本操作

示例代码如下:

driver.get("https:uutool.cn/ueditor/")
content = "欢迎关注公众号:软件测试君";
#ueditor_0为所在iframe的id
js = "document.getElementById('ueditor_0').contentDocument.write('" + content + "');"
driver.execute_script(js)

五、日历控件操作

思路:移除元素的readonly属性,然后执行输入操作

示例代码如下:

driver.get("https://kyfw.12306.cn/otn/index/init")
# 去掉元素的readonly属性
js = 'document.getElementById("train_date").removeAttribute("readonly");'
driver.execute_script(js)

# 用js方法输入日期
# js_value = 'document.getElementById("train_date").value="2022-11-24"'
# driver.execute_script(js_value)

# # # 清空文本后输入值
driver.find_element(By.ID,"train_date").clear()
driver.find_element(By.ID,"train_date").send_keys("2022-11-24")

我也曾无数次问过自己,该不该继续坚持写文章努力更新下去?

也可以说,我曾动摇过,因为做公号迁移后,导致我文章阅读量及转载的严重下滑,这真的让我很难受。

回想当初做公号的初心,一是为了交友,找到一些志同道合的技术朋友一起学习,二是,写出来当做学习笔记,或者可以说是复习笔记。

但更多的可能是期待能得到更多正向反馈,因为能让我们自己一直持续做某一件事情的原因,多半是来自他人的认可,然后并尽量把这件事情做到更好。

有自己的目标,找到自己努力的方向及节奏,只管坚持去做好了,剩下的就交给时间吧!

我是六哥,请继续关注我,一直996工作制,更文稍慢,还请谅解,原创不易,不求打赏,只求转发!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK