八大定位方式

导包:

from selenium.webdriver.common.by import By

1、标签 id 属性的定位

ele = driver.find_element(by=By.ID, value="search-input")

2、标签 name 属性的定位

ele = driver.find_element(by="name", value="search-input")

3、需要标签名称的值

ele = driver.find_element(by="tag name", value="input")

4、定位元素的依据是元素中的class 属性

# class属性值中如果带有空格,意味着它其实是一个组合属性值;所以在使用class name的定位方式的时候,class的属性值,只能接受一个(以属性值中的空格符合 来 区分 属性值);

5、通过a标签中的文字定位(text属性)

ele = driver.find_element(by=By.LINK_TEXT, value="登录")

6、link text 的模糊匹配的定位方式,需要a标签中部分 text 属性的值

ele = driver.find_element(by=By.PARTIAL_LINK_TEXT, value="登")

7、通过css定位

7.1 绝对路径

#使用标签名标识层级名称(当前路径名称),使用> 标识下一级
ele = driver.find_element(by=By.CSS_CELECTOR, value="html>body>div>div>div>form>div>input")

7.2 相对路径

# 表示 前面有多少路径我都忽略,我从input开始寻找
ele = driver.find_element(By.CSS_SELECTOR, "input")

7.3 属性过滤

#使用[]标识内部内容为属性的过滤字段
ele = driver.find_element(By.CSS_SELECTOR, 'html>body>header>div>div>ul>li>a[class="am-dropdown-toggle "]')

7.4 其他的过滤方式

参考:https://www.w3school.com.cn/cssref/css_selectors.asp

8、通过xpath定位

8.1 绝对路径

#使用标签名标识层级名称(当前路径名称),使用 / 标识下一级
ele = driver.find_element(by=By.XPATH, value="html/body/div/div/div/form/div/input")

8.2 相对路径

# 表示 前面有多少路径我都忽略,我从input开始寻找
ele = driver.find_element(By.XPATH, "//input")

8.3 属性过滤

#与css 不同,它需要使用@符号标识属性
ele = driver.find_element(By.XPATH, '/html/body/header/div/div/ul/li/a[@class="am-dropdown-toggle "]')

#或者
ele = driver.find_element(By.XPATH, '//a[@class="am-dropdown-toggle "]')

# 多属性定位
driver.find_element(By.XPATH,'//a[@title="tutorial" and @rel="follow"]')

# xpath模糊匹配的函数有两种: starts-with和和contains
#1、class属性值以btn开头的label元素
driver.find_element(By.XPATH,"//label[starts-with(@class,'btn')]")

#2、通过属性值包含btn的label元素
driver.find_element(By.XPATH,"//label[contains(@class,'btn')]")

# xpath通过文本定位元素,文本内容的定位是利用html的text字段进行定位的方法
driver.find_element(By.XPATH, "//span[text()='下一步']")

# 文本内容也支持starts-with和contains模糊匹配
driver.find_element(By.XPATH,"//span[starts-with(text(),下一步')]”)
driver.find_element(By.XPATH,"//span[contains(text(),'下一步')]")

```                    
xpath常见语法一览表
表达d 说明 举例
/ 从根节点开始选取 /html/div/span
// 从任意节点开始选取 //input
. 选取当前节点
.. 选取当前节点的父节点 //input/.. 会选取 input 的父节点
@ 选取属性,或者根据属性选取 //input[@data] 选取具备 data 属性的 input 元素 //@data 选取所有 data 属性
* 通配符,表示任意节点或任意属性 //*[@name='searchKey'] //*[@*='s_int']"                    
```

8.4 其它过滤方式

参考:https://www.runoob.com/xpath/



特殊定位方式

1、元素对象内定位(父子元素定位)

from selenium import webdriver
from selenium.webdriver.common.by import By
 
# 假设您已经有了一个Selenium WebDriver实例叫做driver
 
# 定位父元素
parent_element = driver.find_element(By.XPATH, "//div[@class='parent']")
 
# 定位子元素相对于父元素的位置
child_element = parent_element.find_element(By.XPATH, ".//div[@class='child']")
 
# 现在您可以对子元素执行操作,例如点击
child_element.click()

2、多元素定位

# 返回的是一个list,list中包含的是元素对象
ele = []
eles = driver.find_elements(By.XPATH, "//input")

3、网格定位

参考:https://www.cnblogs.com/rmticocean/p/17966286

4、下拉列表,要求标签名必须是select的标签

from selenium import webdriver
from selenium.webdriver.support.ui import Select
 
# 启动浏览器
driver = webdriver.Chrome()
 
# 打开网页
driver.get("http://www.example.com")
 
# 定位到下拉列表元素,要求标签名必须是select的标签
select = Select(driver.find_element_by_id("dropdown"))
 
# 通过索引选择
select.select_by_index(0)  # 选择第一个选项
 
# 通过值选择
select.select_by_value("value1")
 
# 通过文本选择
select.select_by_visible_text("text1")
 
# 关闭浏览器
driver.quit()



元素操作

1、输入操作

ele.send_keys("呵呵")

2、点击操作

ele.click()

3、截图操作

# 保存图片到本地
ele.screenshot('1.png') 

4、获取元素的属性的值

ele.get_attribute('id')
posted on 2024-04-12 18:34  彭灰  阅读(667)  评论(0编辑  收藏  举报