自学Python 69 Selenium八大元素定位方法(新版BY方法)

news2024/11/23 19:03:27

Python Selenium八大元素定位方法(新版BY方法)


文章目录

  • Python Selenium八大元素定位方法(新版BY方法)
  • 前言
  • 一、常用的八种定位方法(新旧对比)
  • 二、查看网页元素
  • 三、八大元素定位示例
    • 1、id定位
    • 2、name定位
    • 3、class定位
    • 4、tag定位
    • 5、link定位
    • 6、partial_link定位
    • 7、xpath定位
    • 8、CSS定位


前言

  在学习使用Selenium对网页元素进行定位时,发现很多教程依然使用老版的元素定位方法,但是对于新版selenium来说,已经弃用了之前的元素定位方法,所以在使用的时候会发现有报错,会被一条横线划掉。所以今天来总结一下新版selenium对网页元素进行定位的操作方法。


一、常用的八种定位方法(新旧对比)

  先介绍一下selenium定位元素的一些常见方法

定位方法新版旧版
by_idfind_element(By.ID,value=’’)find_element_by_id()
by_namefind_element(By.NAME,value=" ")find_element_by_name()
by_class_namefind_element(By.CLASS_NAME,value=" ")find_element_by_class_name()
by_tag_namefind_element(By.TAG_NAME,value=" ")find_element_by_tag_name()
by_link_textfind_element(By.LINK_TEXT,value=" ")find_element_by_link_text()
by_partial_link_textfind_element(By.PARTIAL_LINK_TEXT,value=" ")find_element_by_partial_link_text()
by_css_selectorfind_element(By.CSS_SELECTOR,value=" ")find_element_by_xpath()
by_xpathfind_element(By.XPATH,value=" ")find_element_by_xpath()

  Selenium八大元素定位方法的优缺点对比如下:

 ● 1. ID定位

优点:ID是唯一的,定位速度快。

缺点:有些元素没有ID,不适用。

 ● 2. Name定位

优点:Name属性通常是唯一的,定位速度快。

缺点:有些元素没有Name属性,不适用。

 ● 3. Class Name定位

优点:Class Name属性通常是唯一的,定位速度快。

缺点:有些元素没有Class Name属性,不适用。

 ● 4. Tag Name定位

优点:Tag Name属性通常是唯一的,定位速度快。

缺点:有些元素没有Tag Name属性,不适用。

 ● 5. Link Text定位

优点:Link Text属性通常是唯一的,定位速度快。

缺点:只适用于链接。

 ● 6. Partial Link Text定位

优点:Partial Link Text属性通常是唯一的,定位速度快。

缺点:只适用于链接。

 ● 7. CSS Selector定位

优点:CSS Selector可以通过多个属性组合定位元素,定位灵活。

缺点:CSS Selector语法较为复杂,学习成本较高。

 ● 8. XPath定位

优点:XPath可以通过多个属性组合定位元素,定位灵活。

缺点:XPath语法较为复杂,定位速度较慢。

二、查看网页元素

  以谷歌浏览器打开百度为例,点击右上角>更多工具>开发者工具,或者点击鼠标右键选择>检查,就可以看到整个页面的html代码了。
在这里插入图片描述
  点击框中左上角的箭头图标,移动鼠标到百度搜索框,就可以自动定位到百度搜索框的HTML代码了,查看到搜索框的属性,我们可以看到搜索框有id,name,class等属性。

在这里插入图片描述

三、八大元素定位示例

  代码前置操作,导库和包,创建浏览器对象并打开想要用Selenuim操作的网页。

# 导入selenium库
from selenium import webdriver
# 导入time库
import time
# 导入By类,用于指定元素定位方式
from selenium.webdriver.common.by import By
# 创建Chrome浏览器对象
driver = webdriver.Chrome()
# 设置要访问的网址
url = 'http:www.baidu.com'
# 打开网址
driver.get(url = url)

1、id定位

  从上面定位到的搜索框属性中,有个id="kw"的属性,我们可以通过这个id定位到这个搜索框。
在这里插入图片描述

代码:


driver.find_element(By.ID, 'kw').send_keys('Selenuim')

  该行代码实现在百度搜索框中输入“Selenuim”。

2、name定位

  从上面定位到的搜索框属性中,有个name="wd"的属性,我们可以通过这个name定位到这个搜索框。

代码:

driver.find_element(By.NAME,'wd').send_keys('selenium')

  该行代码实现name定位搜索框,并输入selenium。

3、class定位

  从上面定位到的搜索框属性中,有个class="s_ipt"的属性,我们可以通过这个class定位到这个搜索框。

代码:

driver.find_element(By.CLASS_NAME,'s_ipt').send_keys('selenium')

  该行代码实现class定位搜索框,并输入selenium。

4、tag定位

  如果懂HTML知识,我们就知道HTML是通过tag来定义功能的,比如input是输入,table是表格,等等…每个元素其实就是一个tag,一个tag往往用来定义一类功能,我们查看百度首页的html代码,可以看到有很多div,input,a等tag,所以很难通过tag去区分不同的元素。基本上在我们工作中用不到这种定义方法,仅了解就行。下面代码仅做参考,运行时必定报错。

代码:

driver.find_element(By.TAG_NAME,'input').send_keys("selenium")

  该行代码实现tag定位搜索框,并输入selenium, 此处必报错。

5、link定位

  此种方法是专门用来定位文本链接的,比如百度首页右上角有“新闻”,“hao123”,“地图”等链接。
在这里插入图片描述

代码:

driver.find_element(By.LINK_TEXT,'新闻').click()

  该行代码实现link定位"新闻"这个链接并点击。

6、partial_link定位

  有时候一个超链接的文本很长很长,我们如果全部输入,既麻烦,又显得代码很不美观,这时候我们就可以只截取一部分字符串,用这种方法模糊匹配了。

代码:

driver.find_element(By.PARTIAL_LINK_TEXT,'闻').click()

  该行代码实现partial_link定位"新闻"这个链接并点击。

7、xpath定位

  前面介绍的几种定位方法都是在理想状态下,有一定使用范围的,那就是:在当前页面中,每个元素都有一个唯一的id或name或class或超链接文本的属性,那么我们就可以通过这个唯一的属性值来定位他们。
  但是在实际工作中并非有这么美好,有时候我们要定位的元素并没有id,name,class属性,或者多个元素的这些属性值都相同,又或者刷新页面,这些属性值都会变化。那么这个时候我们就只能通过xpath或者CSS来定位了。

  xpath获取方法:定位到百度搜索框的HTML代码,单击鼠标右键>Copy>Copy XPath
在这里插入图片描述

代码:

driver.find_element(By.XPATH,"//*[@id='kw']").send_keys('selenium')

  该行代码实现xpath定位搜索框,并输入selenium

8、CSS定位

  这种方法相对xpath要简洁些,定位速度也要快些,但是学习起来会比较难理解,这里只做下简单的介绍。
代码:

driver.find_element(By.CSS_SELECTOR,'#kw').send_keys('selenium')

  该行代码实现CSS定位搜索框,并输入selenium

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/684290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL - 第9节 - MySQL内外连接

目录 1.内连接 2.外连接 2.1.左外连接 2.2.右外连接 3.简单案例 1.内连接 • 表的连接分为内连接和外连接。 • 内连接实际上就是利用where 子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查…

【C++】模板初级内容(函数模板,类模板)

文章目录 前言一、函数模板1.1 函数模板概念1.2函数模板格式1.3模板的原理:1.4函数模板的实例化 二、类模板2.1 类模板的定义格式2.2定义与声明分离要注意的点 前言 告诉编译器一个模子,让编译器根据不同的类型利用该模子来生成代码 模板分为函数模板与类…

MES系统常用的数据采集网关

随着制造业的数字化转型,MES(制造执行系统)在生产过程中的重要性日益凸显。MES系统作为连接企业资源和生产现场的桥梁,需要实时、准确地采集和整合工业设备的数据,以支持生产调度、质量管理、库存控制等关键业务。为了…

探索Gradio Audio模块的change、clear和play方法

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

C#常见技能_封装

大家好,我是华山自控编程朱老师 前几天一个学员在学习C#与封装交互时,也不知道封装可以用来做什么 。下面我们就详细讲讲C# 和封装交互的相关知识。 C#是一种面向对象的编程语言,封装是面向对象编程中的一个重要概念,通过封装可以将数据和操…

CAN(1)-GD32

CAN-GD32 电路 CAN 是 Controller Area Network 的缩写,是 ISO 国际标准化的串行通信协议。 CAN总线的很多优点,使得它得到了广泛的应用,如传输速度最高到1Mbps, 通信距离最远到10km,无损位仲裁机制,多主结构。 CAN总线的标准 CAN总线标准之规定了物理层和数据链路层…

并发和并行的区别

目录 背景过程例子:定义:并发解决办法(Redisson):解决并发步骤(Redisson): 总结 背景 在设计Arpro第三版的时候马总提出了一个问题,我们认为人家表达是并发问题&#xf…

吉他如何实现内录or通过转接头和简易声卡连接电脑没有声音怎么办

目录 效果器or智能音箱 电吉他和效果器的连接 效果器和耳机or音箱连接 内录方法 为什么用6.5mm(入)转3.5mm(出)转接头内录无声音 整体连接图示 这篇文章我会以通俗的语言为初学者描述如何让电吉他“燃起来”,效果…

【每日算法 数据结构(C++)】—— 03 | 合并两个有序数组(解题思路、流程图、代码片段)

文章目录 01 | 👑 题目描述02 | 🔋 解题思路03 | 🧢 代码片段 An inch of time is an inch of gold, but you can’t buy that inch of time with an inch of gold. An inch of time is an inch of gold, but you cant buy that inch of time…

mysql——存储过程

目录 存储过程存储过程的优点创建存储过程调用存储过程查看存储过程查看存储过程的详细信息查看存储过程的属性 存储过程的参数删除存储过程存储过程控制语句 存储过程 存储过程是一组为了完成特定功能的SQL语句集合存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句…

【Openvino02】openvino2022.1加速卡Movidius Myriad测试以及问题解决

接上一篇,上一篇我们已经把环境什么的都安装好了,本篇主要做一下各种模型测试,模型下载验证等;背景这里就不多说了,上篇已经介绍过了。 一、安装开发验证环境 1.安装所需包 这里建议用清华和豆瓣的镜像相互替换&…

4K 免费的图片素材去哪里找?这6个网站告诉你答案。

推荐几个免费高清图片素材库,今后再也不用为找图片而发愁了,建议收藏起来~ 菜鸟图库 https://www.sucai999.com/pic.html#?vNTYxMjky ​ 网站主要是为新手设计师提供免费素材的,素材的质量都很高,类别也很多,像平面…

C++primer(第五版)第一章(开始)

面对八百多页的C圣经《Cprimer》我陷入了沉思。最近终于下定决心把它啃下来,现在打算记录每章的关键点,一是为了巩固知识,二是以后要复习什么的也不用再碰那本砖头。 1.1编写一个简单的C程序 书中给了几行代码: int main() {return 0; } …

Crypto__1

编码 莫斯密码 Base编码 常见的Base64 Base32 Base16 Base64 将通过ASCLL码改成二进制数 因为64是2的6次方 所以将原文转换的二进制数分别取六位,不足的补0 每次取出6bit,按照其值选择 ABBCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123…

大模型部署实战(四)——ChatGLM2-6B

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

Linux内核开发有用的工具网站

Linux内核官方相关 Linux内核主线源码 https://github.com/torvalds/linux 最新内核说明文档 https://docs.kernel.org/index.html Linux内核模块相关 内核配置与驱动查询 https://www.kernelconfig.io/index.html 内核模块编程指南 https://sysprog21.github.io/l…

mybatis模拟04

create SqlSession Class package com.wsd.core;/*** description: 执行sql* author: Mr.Wang* create: 2023-06-24 16:55**/ public class SqlSession { }SqlSessionFactory 中创建 openSqlSession method to get a sql session instance /*** description Get sql session in…

中国人民大学与加拿大女王大学金融硕士——在职读研让能力加速提升

不管你是初入职场的小白,还是久经沙场的元老,想要在职场有所作为,就不要忽略自我能力提升。决定一个人当前职场价值不是他拥有了什么,而是他将来能够创造什么。如果你只盯着工作,那么你的眼界和薪资将会被工作所决定&a…

LeetCode动态规划(一)之动规思想概述基础题目

文章目录 动态规划开撸——基础题目1. lc509 斐波那契数2. lc746 使用最小花费爬楼梯3. lc63 不同路径II4. lc343 整数拆分 动态规划 记住动归5部曲: 1.确定dp数组(dp table)以及下标的含义 2.确定递推公式 3.dp数组如何初始化 4.确定遍历…

MySQL——变量与游标

今天我们来一起学习MySQL中的变量(系统变量与用户变量),以及什么是游标,游标如何使用? 1. 变量 在 MySQL 数据库的存储过程和函数中,可以使用变量来存储查询或计算的中间结果数据,或者输出最终…