3-selenium自动化获取元素信息、键鼠控制、切换

selenium


一、获取元素信息

1、获取文本

.text不多说了

2、获取元素属性

get_attribute
请添加图片描述

# 先partial_link定位到一条超链接  partial:部分性的
t = driver.find_element(By.PARTIAL_LINK_TEXT, "一致性八仙图")
print("标题:" + t.text)


# get_attribute获取链接文字与网址
"""attribute value: 属性值特性值"""
print("链接:" + t.get_attribute("href"))

# 退出
driver.quit()

"""运行结果"""
C:\Users\86130\AppData\Local\Programs\Python\Python37\python.exe D:\pythonTest\sele\202309\09\1-get.py 
标题:第三代分布式数据库:一致性八仙图
链接:https://blog.csdn.net/fly2nn/article/details/132746249

Process finished with exit code 0
3、获取其他属性

除了属性和文本值外,还有id、位置、标签名和大小等属性。

"""仍采用上面的超链接例子"""
# 获取其他属性
print("所获取元素的id:"+t.id)
# print("所获取元素的位置:"+t.location)
print("所获取元素的标签名:"+t.tag_name)
# print("所获取元素的大小:"+t.size)

"""运行结果"""
C:\Users\86130\AppData\Local\Programs\Python\Python37\python.exe D:\pythonTest\sele\202309\09\1-get.py 
标题:第三代分布式数据库:一致性八仙图
链接:https://blog.csdn.net/fly2nn/article/details/132746249
所获取元素的id:94378B34DBA0A704EEA9587A1DDA75F7_element_145
所获取元素的标签名:a

Process finished with exit code 0

二、鼠标控制

在webdriver 中,鼠标操作都封装在ActionChains类[需要先导包,用时需要先将驱动传参进来:ActionChains(driver).xxx;设置的操作后面需要加上.perform()才会真正执行]中,常见方法如下:

请添加图片描述

1、单击左键——click()

左键不需要用到ActionChains类,用法在9-8里写了

2、单击右键——context_click()

需要先用Action Chains类后再操作

"""
搜索框元素
<button id="toolbar-search-button"><i></i><span>搜索</span></button>
"""

# 用id定位到搜索框
bn = driver.find_element(By.ID, "toolbar-search-button")

# 模拟单击右键 context:背景;上下文  perform:执行
ActionChains(driver).context_click(bn).perform()
time.sleep(2)

3、双击——double_click()
# 模拟双击左键的操作
sou = driver.find_element(By.ID, "toolbar-search-input")
sou.send_keys("1522848401")
ActionChains(driver).double_click(bn).perform()
"""浏览器中的运行结果是打开了两个搜索的新页面"""
time.sleep(2)
4、拖动——drag_and_drop()

拖动操作有两个必要的参数:

  • source:鼠标拖动的元素
  • target:鼠标拖至并释放的目标元素
# 定位要拖动的元素
source = driver.find_element_by_xpath('xxx')
# 定位目标元素
target = driver.find_element_by_xpath('xxx')
# 执行拖动动作
ActionChains(driver).drag_and_drop(source, target).perform()

感觉在人机验证里会用到,目前没找到合适的操作用例。

5、鼠标悬停——move_to_element()

模拟悬停的作用一般是为了显示隐藏的下拉框

# 用XPATH定位登录区域
b = driver.find_element(By.XPATH, "//div/div/div[3]/div/div[1]/a")
# move_to_element()设置鼠标悬停
ActionChains(driver).move_to_element(b)
time.sleep(3)

三、键盘控制

webdriverKeys 类几乎提供了键盘上的所有按键方法,我们可以使用 send_keys + Keys 实现输出键盘上的组合按键如 “Ctrl + C”、“Ctrl + V” 等。

使用前需要先导包,导包代码:

from selenium.webdriver.common.keys import Keys

使用方法:将要模拟的按键操作传参使用

.send_keys(Keys.XXX)

请添加图片描述

1、模拟回车——Keys.ENTER
# 用id定位到搜索框
bn = driver.find_element(By.ID, "toolbar-search-input")
# 传入内容
bn.send_keys("1522848401")
time.sleep(5)

# 模拟回车键跳转
bn.send_keys(Keys.ENTER)
time.sleep(2)
2、其他的操作同上
from selenium.webdriver.common.keys import Keys

# 定位输入框并输入文本
driver.find_element_by_id('xxx').send_keys('Dream丶killer')

# 模拟回车键进行跳转(输入内容后) 
driver.find_element_by_id('xxx').send_keys(Keys.ENTER)

# 使用 Backspace 来删除一个字符
driver.find_element_by_id('xxx').send_keys(Keys.BACK_SPACE)

# Ctrl + A 全选输入框中内容
driver.find_element_by_id('xxx').send_keys(Keys.CONTROL, 'a')

# Ctrl + C 复制输入框中内容
driver.find_element_by_id('xxx').send_keys(Keys.CONTROL, 'c')

# Ctrl + V 粘贴输入框中内容
driver.find_element_by_id('xxx').send_keys(Keys.CONTROL, 'v')

四、切换

1、窗口切换

窗口切换需要使用 switch_to.windows() 方法。

9.8里写过了,这里补充一些方法

***句柄(handle):***是指浏览器窗口的唯一标识符。每个浏览器窗口都有一个唯一的句柄,可以用来在多个窗口之间进行切换和操作。

handles = []
# 获取当前窗口的句柄.current_window_handle
handles.append(driver.current_window_handle)

使用 ***switch_to.windows() ***进行切换:9.8里面

# 获取所有窗口的句柄
all_handles = driver.window_handles
# 切换到新窗口
driver.switch_to.window(all_handles[1])
# 在新窗口中进行操作
# ...
# 切换回原始窗口
driver.switch_to.window(all_handles[0])
2、表单切换

很多页面也会用带 frame/iframe 表单嵌套,对于这种内嵌的页面 selenium 是无法直接定位的,需要使用 switch_to.frame() 方法将当前操作的对象切换成 frame/iframe 内嵌的页面。

frame/iframe 表单嵌套::
frame和iframe是用于在一个网页中嵌入另一个网页的标签。它们可以将一个网页分割成多个独立的区域,并在每个区域中加载不同的网页内容。

***frame:***是HTML中的一个标签,它可以将一个网页分割成多个框架。每个框架都可以加载不同的网页内容。每个frame都有自己的文档对象模型(DOM),即它们可以独立地操作和访问。

***iframe:***也是HTML中的一个标签,它是frame的一种特殊形式。它用于在一个网页中嵌入另一个网页,创建一个内联的框架。与frame类似,每个iframe都有自己的DOM,可以独立地操作和访问。

switch_to.frame() 默认可以用的 id 或 name 属性直接定位,但如果 iframe 没有 id 或 name ,这时就需要使用 xpath 进行定位。

from selenium import webdriver
from pathlib import Path

# 1.通过id定位
driver.switch_to.frame('CSDN_info')
# 2.通过name定位
# driver.switch_to.frame('Dream丶Killer')
# 通过xpath定位
# 3.iframe_label = driver.find_element_by_xpath('/html/body/iframe')
# driver.switch_to.frame(iframe_label)

driver.find_element_by_xpath('//*[@id="csdn-toolbar"]/div/div/div[1]/div/a/img').click()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JC03

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值