Selenium基础:18种元素定位方法

元素定位

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com/")

# find_element(By.xx, xxx)
# 1.通过元素的ID属性定位
driver.find_element(By.ID, "kw")

# 2.通过元素的name属性定位
driver.find_element(By.NAME, "wd")

# 3.通过标签定位
driver.find_element(By.TAG_NAME, "input")

# 4.通过元素的calss属性定位
driver.find_element(By.CLASS_NAME, "s_ipt")

# 5.通过链接文本的定位 此定位方式使用完整匹配可见元素进行匹配,仅适用于链接元素定位,只能用于a标签
driver.find_element(By.LINK_TEXT, "新闻").click()

# 6.通过部分连接文本定位。 partial link text只要可见文本中包含指定的文本,则匹配成功
driver.find_element(By.PARTIAL_LINK_TEXT, "新")
# 通过元素的CSS_SELECTOR属性定位
driver.find_element(By.CSS_SELECTOR, "wd")

# find_elements(By.xx, xxx)
# 这个返回的是元素列表[]
driver.find_elements(By.ID, "kw")
driver.find_elements(By.NAME, "wd")
driver.find_elements(By.TAG_NAME, "input")
driver.find_element(By.CLASS_NAME, "s_ipt")
driver.find_element(By.LINK_TEXT, "新闻").click()
driver.find_elements(By.PARTIAL_LINK_TEXT, "新")

# 六大方法:结合常用的属性name  id  class tag 和对a标签的元素行为find_element(By.LINK_TEXT,"xxx"),find_element(By.PARTIAL_LINK_TEXT, "新")

xpath定位

注意事项:

  1. xpath 定位 —外层是双引号“”,里面就必须要为‘’,否则会报错
  2. 页面工具复制: copyxpath
  3. //*[@id=“kw”] ----//相对路径, *任意标签, [@id=“kw”]任意标签下的id属性=“kw”; 这样的kw属性不能确定是唯一的
  4. 定位思路: 首先定位元素,然后找到input,在从input这个标签上级的任意一个元素去找目标标签,其实路径可以是任意一个上级位置
    所以此处的相对路径为://form/span/input
    也可以是://span/input
  5. 在F12里按住:ctrl+f,xpath语句及css语句验

.

# 通过元素的XPATH属性定位
# 通过绝对路径定位(不要用)  不只是为了定位这个元素,需要考虑脚本稳定    绝对路径:通过 / 开头,从页面开始标签一直导航到目标标签
element_xpath = driver.find_element(By.XPATH, "/html/body/div/div[2]/div[5]/div[1]/div/form/span[1]/input")

# 通过相对路径定位,常用   
# 相对路径:通过 //开头  从某个标签开始一直导航到目标标签
element_xpath1 = driver.find_element(By.XPATH, "//form[@id='form']/span/input")

# 如果层级里有多个input或者span:
# 唯一定位标签+属性
driver.find_element(By.XPATH, "//form[@id='form']/span[1]/input[@id='kw']")
# 唯一定位标签+多个属性
driver.find_element(By.XPATH, "//form[@id='form'and @name='wd']/span[1]/input[@id='kw']")
# 标签+部分属性定位
driver.find_element(By.XPATH, "//form/span/input[substring(@class,3='ipt')]")   # substring截取某一个属性的部分值s_ipt,i为第3个元素
driver.find_element(By.XPATH, "//form/span/input[contains(@id,'kw')]")          # contains,判断某个属性里是否包含 ‘kw’
driver.find_element(By.XPATH, "//form/span/input[start-with(@id,3='k')]")       # 通过层级和属性来定位

# XPATH实现文本定位
element_xpath = driver.find_element(By.XPATH, "//a[text()='新闻']")
element_xpath.click()       # 如果 页面未显示点击操作,应该是窗口太小获取不到 将窗口放大就好了driver.maximize_window()

css定位

基于find_element(By.CSS_SELECTOR, “xxx”) 实现

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com/")

# 通过id定位    #id属性
driver.find_element(By.CSS_SELECTOR, "#kw")

# 通过class属性定位       .class属性
driver.find_element(By.CSS_SELECTOR, ".s_ipt")

# 通过其他属性定位,并且多个属性定位
driver.find_element(By.CSS_SELECTOR, "[autocomplete='off'][class='s_ipt']")

# 通过标签定位  标签+属性/id/class进行定位   组合定位
driver.find_element(By.CSS_SELECTOR, "input#kw")
driver.find_element(By.CSS_SELECTOR, "input.s_ipt")
driver.find_element(By.CSS_SELECTOR, "input[autocomplete='off'][class='s_ipt']")

# 通过层级定位   层级之间通过> 或者空格隔开         ---相对路径
driver.find_element(By.CSS_SELECTOR, "form>span>input")

# 通过兄弟节点定位
# 场景:同一个元素下面有多个相同的元素
# 第一个元素    标签:first-child
# 第三个元素    标签:nth-child(n)
# 最后一个元素  标签:last-of-type
el1 = driver.find_elements(By.CSS_SELECTOR, "div#s-top-left>a:first-child")
el2 = driver.find_elements(By.CSS_SELECTOR, "div#s-top-left>a:nth-child(3)")
el3 = driver.find_elements(By.CSS_SELECTOR, "div#s-top-left>a:last-of-type")
el1.click() 

"""
定位多个元素
find_elements() 返回的是个列表
"""
ellist = driver.find_elements(By.CSS_SELECTOR, "input")
el = ellist[0]   # 取第一个元素
print(el)

"""
元素定位是否通过一个方法,支持所有的定位当时定位到元素?
find_element()
find_elements()  基于多个定位方式找到一组元素
webdriver 底层关于元素定位: 8大方法+8确定为一组+2底层
常用的: 	1.id定位  2.name定位 3.class定位 4.tag定位 5.link定位 6.partial_link定位 7.xpath定位 8.css定位
复数形式:	1.id复数定位  2.name复数定位 3.class复数定位 4.tag复数定位 5.link复数定位 6.partial_lin复数k定位 7.xpath复数定位 		  8.css复数定位
两种是参数化(pom模型常见) :
			 1. find_element(self, by='id', value=None)
             2. find_elements(self, by='id', value=None)
	
"""
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值