python+selenium的八大定位方式

目录

1.id属性

2.name属性

3.class_name属性

4.tag_name标签名

7.XPath

1、路径

2、元素属性

3、属性和逻辑结合

4、层级与属性结合

5、使用函数

8.CSS

1、id选择器

2、class选择器

3、元素选择器

4、属性选择器

5、层级选择器

6、css扩展


1.id属性

  • 说明:就是通过元素的id属性来定位元素,html规定id属性在整个html文档中必须唯一的
  • 前提:元素有id属性
  • 方法:element = driver.find_element(By.ID,"值")

2.name属性

  • 说明:就是通过元素的name属性来定位元素,在html文档中name属性是可以重复的
  • 前提:元素有name属性
  • 方法:element = driver.find_element(By.NAME,"值")

3.class_name属性

  • 说明:就是通过元素的class属性值来定位元素,html通过使用class来定义元素的样式
  • 前提:元素有class属性
  • 注意:如果class有多个属性值,只能使用其中一个
  • 方法:element = driver.find_element(By.CLASS_NAME,"值")

4.tag_name标签名

  • 说明:通过标签名来定位
  • 注意:html本质就是由不同的tag组成,每一种标签一般在页面中会存在多个,所以不方便进行精准定位,一般很少使用
  • 方法:element = driver.find_element(By.TAG_NAME,"值")
  • 说明:是专门用来定位超链接元素(<a>内容...</a>),并且是通过超链接的文本内容来定位元素
  • 方法:element = driver.find_element(By.LINK_TEXT,"超链接的全部文本内容")
  • 说明:通过局部链接的文本定位,link_text使用全部文本内容匹配元素,partial_link_text可以使用局部文本内容来匹配元素,也可以使用全部文本内容匹配元素
  • 方法:element = driver.find_element(By.PARTIAL_LINK_TEXT,"超链接的部分文本内容")

7.XPath

方法:driver.find_element(By.XPATH,"值")

1、路径

绝对路径:从最外层元素到指定元素之间所有经过元素层级的路径

绝对路径以/html根节点开始,使用/来分隔层级
eg:/html/body/div/fieldset/p[1]/input
#绝对路径对页面结构要求比较严格,不建议使用

相对路径:匹配任意层级的元素,不限制元素的位置

相对路径//开始
//input(标签名) 或者 //*(查找所有标签)

以百度为例:

绝对路径

 相对路径

借助谷歌浏览器如何获取xpath路径

1.元素上右键->检查
2.在F12对应的文档中的对应元素上右键->Copy->Copy XPath或者Copy full XPath

2、元素属性

通过使用元素的属性信息来定位元素

格式://input[@id = 'usera']或者//*[@id = 'usera']

3、属性和逻辑结合

解决元素之间存在相同属性值的问题

格式://*[@name='xxx'] and [@class='yyy']

4、层级与属性结合

如果通过元素自身的属性不方便直接定位该元素,则可以先定位到其父元素,然后再找到该元素

格式://*[@id = 'p1']/input

5、使用函数

//*[text()='xxx']  文本内容是xxx的元素
//*[contains(@attribute,'xxx')] 属性中含有xxx值的元素
//*[starts-with(@attribute,'xxx')]  属性以xxx开头的元素
​

以百度为例:

8.CSS

方法:driver.find_element(By.CSS_SELECTOR,"值")

1、id选择器

  • 说明:根据元素id属性来选择
  • 格式:#id属性值

2、class选择器

  • 说明:根据元素class属性来选择
  • 格式:.class属性值

3、元素选择器

  • 说明:根据元素的标签名选择
  • 格式:标签名

4、属性选择器

  • 说明:根据元素的属性名和值来选择
  • 格式:[属性名='value']

5、层级选择器

  • 说明:根据元素的父子关系来选择的
  • 格式1:element1>element2
    通过element1来定位element2,并且element2必须为element1的直接子元素
    • 例如:p[id='p1']>input
      定位指定p元素下的直接子元素input
  • 格式2:element1 element1(空格隔开)
    通过element1来定位element2,并且element2为element1的后代
    • 例如:p[id='p1'] input

6、css扩展

  • input[type^='p']
    type属性以p字母开头的元素
  • input[type$='d']
    type属性以d字母结束的元素
  • input[type*='w']
    type属性包含w字母的元素

补充:

当我们需要定位一组元素时,方法如下:

  • elements=driver.find_elements("xxx")
    • 作用
      • 1.查找定位符合条件的所有元素
      • 2.返回值是一个列表
    • 说明: 列表数据格式的读取需要指定下标(下标从0开始)

  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用 PythonSelenium 库进行元素定位时,可以创建一个类来管理定位相关的操作。下面是一个示例代码: ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC class ElementLocator: def __init__(self, driver): self.driver = driver def find_element_by_id(self, element_id): return self.driver.find_element(By.ID, element_id) def find_element_by_xpath(self, xpath): return self.driver.find_element(By.XPATH, xpath) def wait_for_element_visible(self, locator, timeout=10): return WebDriverWait(self.driver, timeout).until(EC.visibility_of_element_located(locator)) # 可以添加其他常用的元素定位方法,比如 find_element_by_css_selector、find_element_by_class_name 等等 # 示例用法 driver = webdriver.Chrome() element_locator = ElementLocator(driver) element = element_locator.find_element_by_id("element_id") element.click() visible_element = element_locator.wait_for_element_visible((By.XPATH, "//div[@class='my-element']")) ``` 在上面的示例代码中,我们创建了一个名为 `ElementLocator` 的类,它接收一个 Selenium WebDriver 对象作为参数,并提供了一些常用的元素定位方法,比如 `find_element_by_id` 和 `find_element_by_xpath`。此外,还添加了一个 `wait_for_element_visible` 方法,用于等待元素可见。 你可以根据自己的需要扩展 `ElementLocator` 类,添加其他常用的元素定位方法,以便于在测试或爬虫等场景中使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值