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)
三、键盘控制
webdriver
中Keys
类几乎提供了键盘上的所有按键方法,我们可以使用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()