2.Python中selenium八大元素定位

这篇具有很好参考价值的文章主要介绍了2.Python中selenium八大元素定位。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

如何进行元素定位

浏览器开发者工具介绍

一、id属性定位

二、name定位

三、class_name定位

四、tag_name定位

五、link_text定位

六、partail_link_text定位

七、xpath定位

7.1 选取节点

7.2 谓语

7.3 轴

7.4 函数

7.5 逻辑运算

八、css定位

8.1 css的定义

8.2 css定位策略

1.id选择器

2.class选择器

3.tag_name元素选择器

4.属性选择器

5.层级选择器

6.CSS扩展

九、元素动态定位

十、定位元素的选择


如何进行元素定位

html基础知识

元素: 由标签头+标签尾+标签头和标签尾包括的文本内容

元素的信息就是指元素的标签名以及元素的属性

元素的层级结构就是指元素之间相互嵌套的层级结构

元素定位最终就是通过元素的信息或者元素的层级结构来进行元素定位。

浏览器开发者工具介绍

  • 浏览器开发者工作主要用来查看元素的信息, 同时也可以查看接口的相关信息。

  • 浏览器开发者工作不需要安装,浏览器自带.

  • 浏览器开发者工具的启动:

    • 直接按F12 不区分浏览器

    • 通过右键的方式来启动浏览器开发者工具 (谷歌浏览器右键选择“检查”, 火狐浏览器右键选择“检查元素”

  • 浏览器开发者工具使用

    • 点击 浏览器开发者工具左上角的 元素查看器按钮

    • 再点击想要查看的元素

find_element_by_link_text,# Python UI自动化,python,selenium,chrome

元素定义的返回值

返回匹配到的第一个元素

一、id属性定位

通过元素的ID属性值来进行元素定位 ,在html标准规范中 ID值是唯一的

说明: 元素要有ID属性

定位方法: find_element_by_id(id) # id参数表示的是id的属性值

from selenium import webdriver
​
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
print(driver.title)
​
# 获取搜索框
search_input=driver.find_element_by_id('kw')
print(type(search_input))
print('搜索框的name属性值=',search_input.get_attribute('name'))
​
​
driver.quit()

二、name定位

通过元素的name属性值为进行元素定位 name属性值 在HTML页面中,是可以重复的。

说明:元素要有name属性

定位方法: find_element_by_name(name) # name 参数表示的是name的属性值

from selenium import webdriver
​
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
print(driver.title)
​
# 通过name属性定位搜索框
search_input_by_name=driver.find_element_by_name('wd')
print('4.搜索框的id=',search_input_by_name.get_attribute('id'))
​
driver.quit()

三、class_name定位

通过元素的class属性值进行元素定位 class属性值是可重复的

说明:元素必须要有class属性

定位方法: find_element_by_class_name(class_name) # class_name参数表示的是class的其中一个属性值

from selenium import webdriver
​
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
print(driver.title)
​
​
# 3.百度logo
logo=driver.find_element_by_class_name('index-logo-src')
print('3.百度logo的src=',logo.get_attribute('src'))
​
​
driver.quit()

四、tag_name定位

通过元素的标签名称进行定位, 在同一个html页面当中,相同标签元素会有很多。

这种定位元素的方式不建议大家在工作当中使用。

定位方法: find_element_by_tag_name(tag_name) # tag_name表示的是元素的标签名称。

如果有重复的元素,定位到的元素默认都是第一个元素

from selenium import webdriver
​
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
​
title=driver.find_element_by_tag_name('title')
print('百度首页的title=',title.tag_name)
driver.quit()

五、link_text定位

通过超链接的全部文本信息进行元素定位 ,主要用来定位a标签

定位方法: find_element_by_link_text(link_text) # link_text参数代表的是a标签的全部文本内

容。

from selenium import webdriver
​
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
​
el_a=driver.find_element_by_link_text('新闻')
print('新闻栏目的url',el_a.get_attribute('href'))
driver.quit()

六、partail_link_text定位

通过超链接的局部文本信息进行元素定位,主要用来定位a标签

定位方法:find_element_by_partial_link_text(partial_link_text) # partial_link_text表示的是a

标签 的局部文本内容

from selenium import webdriver
​
driver=webdriver.Chrome()
​
driver.get('http://www.baidu.com')
​
el_a=driver.find_element_by_partial_link_text('新')
print('新闻栏目的url',el_a.get_attribute('href'))
driver.quit()

七、xpath定位

xpath是一个解析html/xml的语言

7.1 选取节点

nodename         选取此节点的所有子节点

/                         从根节点选取

//                         从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置

.                         选取当前节点

..                         选取当前节点的父节点

@                         选取属性

        案例: //div 获取文档中所有的div

7.2 谓语

用来查找某个特定的节点或者包含某个指定的值的节点,谓语被嵌在方括号中

//div[@class="active"]                 选取class="active"的div

//div[@class="active"]/span         选取class="active"的div子元素的第一个span元素(索引从1开始)

//div[@class="active"]/span[2]         选取class="active"的div子元素的第二个span元素

//div[@class="active"]/span[last()]         选取class="active"的div子元素的倒数第一个span元素

7.3 轴

用来查找相对于当前节点的节点(轴名称::节点名称[谓语])

ancestor                        选取当前节点的所有先辈(父、祖父等)

parent                            选取当前节点的父节点

descendant                    选取当前节点的所有后代元素(子、孙等)

child                               选取当前节点的所有子元素

preceding                       选取文档中当前节点的开始标签之前的所有节点

preceding-sibling            选取当前节点之前的所有同级节点

following                         选取文档中当前节点的结束标签之后的所有节点

following-sibling              选取当前节点之后的所有同级节点

案例://li[text()='发布作业']/preceding-sibling::li[1] 选取text()='发布作业'的li的前面的第一个想到节点li

find_element_by_link_text,# Python UI自动化,python,selenium,chrome

7.4 函数

text():元素的text内容

        li[text()='发布作业']         text()='发布作业'的li

contains(@属性名/text(),value) :包含内容

        li[contains(@class,'ls')]         class包含'ls'的li

7.5 逻辑运算

and 与:

        //div[@class='btn' and contains(@style,'display:block')]         

        表示div元素中class='btn'且style包display:block

or 或

        //div[@class='btn' or contains(@style,'display:block')]

        表示div元素中class='btn'或style包含display:block

from selenium import webdriver
​
driver=webdriver.Chrome()
​
driver.get('http://www.baidu.com')
search_btn=driver.find_element_by_xpath('//input[@value="百度一下"]')
print('2.搜索按钮的id=',search_btn.get_attribute('id'))
driver.quit()

八、css定位

8.1 css的定义

总结:css是可以用来在selenium中定位元素的

CSS定位元素的方法: find_element_by_css_selector(css_selector) # css_selector表示的是CSS选择器表达式

8.2 css定位策略

  • id选择器

  • class选择器

  • 元素选择器

  • 属性选择器

  • 层级选择器

1.id选择器

表达式: #id # 表示通过元素的ID属性进行元素选择 id 表示的的id属性的属性值

# 直接根据id定位,send_keys往输入框输入文本
driver.find_element_by_css_selector("#kw").send_keys('12345')
# 通过标签加id的形式定位,click点击
driver.find_element_by_css_selector('input#su').click()

2.class选择器

表达式: .class .表示通过元素的class属性进行元素选择, class表示的class属性的其中一个属性值

# 直接根据clas定位
driver.find_element_by_css_selector(".s_ipt").send_keys('12345')
# 标签加class
driver.find_element_by_css_selector('input.s_btn').click()
# 多class属性定位
# driver.find_element_by_css_selector('.bg.s_btn').click() # class1 class2
# driver.find_element_by_css_selector('input.bg.s_btn').click() # input加多属性

3.tag_name元素选择器

就是通过元素标签名称来选择元素 。表达式: tag_name 不推荐使用

# 通过css的元素选择器定位搜索输入框,输入12345
inputs = driver.find_elements_by_css_selector('input')
print(inputs)
for i in inputs:
    if i.get_attribute('id') == 'kw':
        i.send_keys('12345')
# 通过css的元素选择器定位搜索按钮,并点击
for i in inputs:
    if i.get_attribute('id') == 'su':
        i.click()

4.属性选择器

就是通过元素的属性来选择元素。 表达式:[attribute='value'] #attribute 表示的是属性名称,value表示的是属性值

如果使用的是class属性,需要带上class的全部属性值

# 通过css的属性选择器定位搜索输入框,输入12345
driver.find_element_by_css_selector("[class='s_ipt']").send_keys('12345')
# 通过css的属性选择器定位搜索按钮,并点击
driver.find_element_by_css_selector("[class='s_btn']").click()

5.层级选择器

父子层级关系选择 器

表达式: element1>element2 通过element1来找element2,并且element2是element1的直接子元素

隔代层级关系选择器

表达式: element1 element2 通过element1来找element2, 并且element2是element1的后代元素

# 匹配子元素, A>B
driver.find_element_by_css_selector('form>span>input').send_keys('12345')
# 匹配后代元素, A空格B
driver.find_element_by_css_selector('form span input').send_keys('12345')

6.CSS扩展

input[type^='value'] input表示标签名称,type表示属性名称, value表示的文本内容

查找元素type属性值是以value开头的元素

input[type^='p']  #type属性以p字母开头的元素

input[type$='value'] input表示标签名称,type表示属性名称, value表示的文本内容

查找元素type属性值以value结尾的元素

input[type$='d']  #type属性以d字母结束的元素

input[type*='value'] input表示标签名称,type表示属性名称, value表示的文本内容

查找元素type属性值包含value的元素

input[type*='w']  # type属性包含w字母的元素
# 精准匹配
driver.find_element_by_css_selector('input[name=wd]').send_keys('12345') # 属性名=属性值
driver.find_element_by_css_selector('input[type="submit"][value="百度一
下"]').click() # 多属性
# 模糊匹配(正则表达式匹配)
driver.find_element_by_css_selector('input[id ^="k"]').send_keys('12345') # ^=匹配以 k 开头的id
driver.find_element_by_css_selector('input[id $="w"]').send_keys('12345') # $=匹配以 w 结尾的id
driver.find_element_by_css_selector('input[value *="度一"]').click() # *= 匹配value 值的中间部分

九、元素动态定位

当元素的定位方式不确定,可能是id,可能是xpath时,需要通过不同的方式动态指定定位方法。

需要导入By类

find_element(by, value) by为定位方式,value为定位表达式

By选择将上面繁琐的元素定位封装了起来,这样使用起来较为方便,只是在使用By选择器前要导入:

from selenium.webdriver.common.by import By

用法如下,非常简单:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
​
driver=webdriver.Chrome()
​
# 打开百度页面
driver.get('http://www.baidu.com')
id_loc=(By.ID,'kw')
# by的最初用法
# driver.find_element(By.ID,'kw').send_keys('我通过id定位')
# 将id_loc解包传入
driver.find_element(*id_loc).send_keys('12345')
​
time.sleep(10)
​
driver.quit()

各元素定位方式写法:

By.ID
By.CLASS_NAME
By.CSS_SELECTOR
By.TAG_NAME
By.NAME
By.PARTIAL_LINK_TEXT
By.LINK_TEXT
By.XPATH

十、定位元素的选择

若html中id元素可用唯一且始终可预测,则id是元素定位的首选方法,因为id是直接定位,不存在遍历带来的大量处理。

若没有唯一的id,则推荐使用css和xpath来查找元素,当使用xpath时。

xpath可通过增加节点层级加快查找速度,但当子节点过多时,页面又发生变化则需要修改定位信息,故层级多时稳定性不高。文章来源地址https://www.toymoban.com/news/detail-765419.html

到了这里,关于2.Python中selenium八大元素定位的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python+selenium自动化八大元素定位方法及实例(超详细)

    目录 一、selenium模块中的find_element_by_id方法无法使用 二、Python+selenium自动化八大元素定位方法 使用场景: 1、通过id属性定位:driver.find_element(By.ID,\\\"value\\\") 2、通过name属性定位:driver.find_element(By.NAME,\\\"value\\\") 3、通过class属性定位:driver.find_element(By.CLASS_NAME,\\\"value\\\") 4、通过tag_name属

    2024年02月19日
    浏览(49)
  • 自动化测试之八大元素定位方式(python3.10+selenium4)

    元素的定位是自动化测试核心。要操作一个对象,首先要识别定位或找到这个对象。为了实现网页整体布局,我们先要知道,一个元素,是如何定位到页面上的某个位置的,这就是元素定位。 系统环境 Windows 11 📌 python3.10.5 🔖 selenium 4.8.0 🚩 注意:以下每种定位方式均有一

    2024年02月03日
    浏览(80)
  • Selenium(一):八大元素定位

    find_element() 中 类型为空,默认为By.ID

    2024年04月23日
    浏览(75)
  • Selenium元素定位——八大方法详述

    元素:由标签头 + 标签尾 + 标签头和标签尾包括的文本内容; 元素的信息就是指元素的标签名及元素的属性; 元素的层级结构就是指元素之间相互嵌套的层级结构; 元素定位最终就是通过元素的信息或者元素的层级结构来进行元素定位; webdriver 提供了一系列的对象定位方

    2024年02月06日
    浏览(49)
  • selenium的八大元素定位方式

    1、什么是元素定位 根据元素的 某个特征 在网页中找到对应的元素,定位元素的目的是为了操作元素,在Web自动化中,定位元素是后续一切操作的前提条件。 2、元素的八大定位方式 2.1、id : 根据标签/元素的id属性值定位 一般情况下元素的id是唯一的,所以通过这个方法可

    2024年03月14日
    浏览(51)
  • selenium脚本编写及八大元素定位方法

    selenium脚本编写 上篇文章介绍了selenium环境搭建,搭建好之后就可以开始写代码了 基础脚本,打开一个网址 打开本地HTML文件 上篇文章我自己写了一个html文件,放在了当前路径下 第一种方式 通过绝对路径打开 第二种方式 通过相对路径打开 本质上也是通过方法把相对路径转为

    2024年01月16日
    浏览(53)
  • Python爬虫(1)一次性搞定Selenium(新版)8种find_element元素定位方式

    selenium中有8种不错的元素定位方式,每个方式和应用场景都不一样,需要根据自己的使用情况来进行修改 目前selenium已经出现了新的版本的定位方式,虽然说定位语法不一样,但是万变不离其宗。 用旧版的定位语法就会出现这个删除线,你用他来进行爬虫的时候运行时就会提

    2024年02月03日
    浏览(62)
  • 【selenium】八大元素定位方式|xpath css id name...

    目录 一、基础元素定位 二、cssSelector元素定位——通过元素属性定位 三、xpath元素定位——通过路径  1 、xpath绝对定位 (用的不多) 缺点:一旦页面结构发生变化(比如重新设计时,路径少两节),该路径也随之失效,必须重新写 2、 xpath相对定位 2.1  路径解释: 2.2  定

    2024年02月22日
    浏览(56)
  • 【selenium模块-WEB自动化】八大网页元素定位方法(三)

    一、id 定位 标签的 id 具有唯一性,就像人的身份证。 二、name 定位 name 指定标签的名称,在页面中可以不唯一。 三、class 定位 class 指定标签的类名,在页面中可以不唯一。 四、tag 定位 每个 tag 往往用来定义一类功能,所以通过 tag 来识别某个元素的成功率很低,每个页面

    2024年02月15日
    浏览(51)
  • python selenium定位元素报错:‘WebDriver‘ object has no attribute ‘find_element_by_id

    标题问题的解决办法参考了这篇文章,然后成功了:(1条消息) 关于新版本selenium定位元素报错:‘WebDriver‘ object has no attribute ‘find_element_by_id‘等问题_selenium新版本定位_热爱学习的猪的博客-CSDN博客 我修正的具体过程 1.我的原始代码: 原始代码报错(有2个,第一个还没有找

    2024年02月02日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包