【selenium】 元素定位

元素定位

    • 1、 一般元素定位方式
    • 2、通过xpath定位
      • 2.1 绝对路径定位
      • 2.2 利用元素属性定位
      • 2.3 层级和属性结合定位
      • 2.4 使用逻辑运算符定位
    • 3、通过css定位元素
    • 4、通过By 定位元素
    • 5、定位一组元素
    • 6、浏览器自带的元素辅助定位功能:

1、 一般元素定位方式

示例网页:

......
<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">
<a href="http://tieba.baidu.com/" target="_blank" class="mnav c-font-normal c-color-t">贴吧</a>
<a href="https://wenku.baidu.com/?fr=bdpcindex" target="_blank" class="mnav c-font-normal c-color-t">一个文本很长的超链接</a>
......
  1. 通过id定位: driver.find_element_by_id("kw")
  2. 通过name定位 :driver.find_element_by_name("wd")
  3. 通过class定位 :driver.find_element_by_class_name("s_ipt")
  4. 通过tag定位:driver.find_element_by_tag_name("input") tag指标签 <input>、<div>、<a>
  5. 通过link定位 :driver.find_element_by_link_text("贴吧")
  6. 通过partical link定位 :driver.find_element_by_partical_link_text("一个文本")

2、通过xpath定位

2.1 绝对路径定位

原理: 类似通过xx省xx市xx区xx路xx号来定位一个人的住址,实际是通过dom树结构定位元素位置
语法:driver.find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span/input")
说明:/表示层级关系,div[2]表示第2个div

2.2 利用元素属性定位

原理:通过元素的属性值来定位元素
语法:

  • find element by_xpath("//input[@id='kw']")
  • find element by_xpath("//input[@maxlength='100']")
  • find element by _xpath("//input[@autocomplete='off]")
  • find element by xpath("//input[@name='wd']")
  • find element by xpath("//*[@class='bg s btn']")

说明:

  • //input表示当前页面的某个目录下的input标签
  • [@id='kw'] 使用属性id ,对应的属性值是 kw
  • //* 不指定标签名,在所有标签中查找

2.3 层级和属性结合定位

原理:某些元素没有特殊的属性可以定位,可以先通过属性定位他的父级元素,然后再通过层级关系定位到这个元素

<form class="numberform"><input value="ejxjdsjjsssddn"><input value="ssmkdlfnskslss">
</form>

通过form父元素定位子元素中的第二个input : driver.find_elment_by_xpath('//form[@class="numberform"]/input[2]')

2.4 使用逻辑运算符定位

<input class="listitem" name="z1">
<input class="listitem" name="z1">
<input class="listitem" name="z2">

通过 and 连接两个属性来定位元素
driver.find_elment_by_xpath('//input[@class="listitem" and @name="z2"])

3、通过css定位元素

  1. 通过id定位: driver.find_element_by_css_selector("#kw")
  2. 通过class定位 :driver.find_element_by_css_selector(".s_ipt")
  3. 通过tag定位:driver.find_element_by_css_selector("form>input")
  4. 通过属性定位: driver.find_element_by_css_selector("[name='kw']")
  5. 组合定位:find element by_css selector("span.s_ipt>input.s_ip") 定位标签为span class=s_ipt下的input标签,且input标签的class= s_ip

xpath和css定位对比

定位方式xpathcss
标签//divdiv
by_id//div[@id=‘elid’]div#elid
by_class//div[@class=‘elclass’]div.elclass
属性//div[@title=‘move mouse here’]div[title=Move mouse here] 或 div{title^=Move] 或div[title$=here] 或 div[title*=mouse]
定位子元素//div/parent/childdiv>parent>child

4、通过By 定位元素

通过By定位元素其实是针对以上三种方式的整合,其原理不变,使用示例如下:

from selenium.webdriver.common.by import Bydriver.find_element(By.ID,"kw")
driver.find_element(By.NAME,"wd")
driver.find_element(By.CLASS NAME,"'s ipt")
driver.find_element(By.TAG NAME,"input")
driver.find_element(By.LINK TEXT,"新闻")
driver.find_element(By.PARTIAL LINK TEXT,"新")
driver.find_element(By.XPATH,"//*[@class='bg s btn']")
driver.find_element(By.CSS SELECTOR,"span.bg s btn wr>input#su")

5、定位一组元素

定位一组元素与定位一个元素的方式类似

  • 单个元素定位: driver.find_element_by_xx
  • 多个元素定位: driver.find_elements_by_xx

示例:

定位单个元素定位一组元素
driver.find_element_by_class_name(“s_ipt”)driver.find_elements_by_class_name(“s_ipt”)
driver.find_element_by_xpath(“//*[@class=‘bg’]”)find_elements_by_xpath(“//*[@class='bg]”)
driver.find_element_by_css_selector(“[name=‘kw’]”)driver.find_elements_by_css_selector(“[name=‘kw’]”)
driver.find_element(By.CLASS NAME,“'s ipt”)driver.find_elements(By.CLASS NAME,“'s ipt”)

对一组元素进行操作,如选中下拉控件的每一个元素
html如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>多选控件示例</title>
</head>
<body>
<h2>请选择您喜欢的水果:</h2>
<form><input type="checkbox" id="apple" name="fruits" value="apple"><label for="apple">苹果</label><br><input type="checkbox" id="banana" name="fruits" value="banana"><label for="banana">香蕉</label><br><input type="checkbox" id="orange" name="fruits" value="orange"><label for="orange">橙子</label><br><input type="submit" value="提交">
</form></body>
</html>

定位input ,它们有共同的name:fruits

import os
from selenium import webdriver
from selenium.webdriver.common.by import By
# 访问本地html
driver = webdriver.Chrome()
file_path ='file:///'+ os.path.abspath('checkbox.html')
driver.get(file_path)
# 定位一组checkbox
checkboxs = driver.find_elements(By.XPATH, '//input[@name="fruits"]')
# 遍历一组元素,对每个元素进行点击
for checkbox in checkboxs:checkbox.click()

6、浏览器自带的元素辅助定位功能:

chrome、edage、firefox 浏览器支持选中元素右键–>检查–>在html源码页面选中元素–>右键–>复制–>

  • 复制xpath
  • 复制完整xpath
  • 复制selector

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

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

相关文章

PacBio or Nanopore:测序技术简单对比

前言 在基因组学和生命科学领域&#xff0c;追求知识的旅程不断演变&#xff0c;由揭示DNA和RNA奥秘的技术创新推动。我们熟知的两大测序技术——PacBio和Nanopore&#xff0c;正位于这一领域的前沿。这些由 Pacific Biosciences 和 Oxford Nanopore Technologies 分别开发的先…

qmi8658姿态解算算法

参考的大佬“Mahony姿态解算算法详解_imu标定mahony 算法-CSDN博客”我这里只是为了记录 参考代码https://download.csdn.net/download/gpio_01/89492825 学习中。。。

实力认可!安全狗受聘成为福建省网信系统2024年度网络安全技术支撑单位

6月6日&#xff0c;福建省委网信办组织召开福建省网信系统2024年度网络安全技术支撑单位座谈会。 作为国内云原生安全领导厂商&#xff0c;安全狗也受邀出席此次活动。 省委宣传部副部长、省委网信办主任、省互联网信息办公室主任张远出席会议并颁发支撑单位证书。安全狗凭借出…

c++质数的几种写法

质数的几种写法 c cmath头文件 #include <cmath> 第1种 bool prime(int n){if(n < 2) return false;//2以下的不是质数&#xff0c;不包含2 for(int i 2;i < n;i)if(n % i 0) return false;return true; } 第2种 bool prime(int n){if(n < 2) return fal…

IDEA-远程debug

jar配置 启动jar包时&#xff0c;添加配置参数&#xff1a; 举例&#xff1a;myApp.jar的端口为8088&#xff0c;配置远程debug端口为8099 java -agentlib:jdwptransportdt_socket,servery,suspendn,address*:8099 -jar -Xmx3g -Xms3g myApp.jar上述参数中&#xff1a; -age…

App推广新选择:Xinstall专属地址推广,让你的品牌瞬间引爆市场!

在移动互联网时代&#xff0c;App的推广与运营成为了每个开发者必须面对的重要课题。然而&#xff0c;随着市场竞争的日益激烈&#xff0c;如何让自己的App在众多竞争者中脱颖而出&#xff0c;成为了每个开发者最为关注的问题。今天&#xff0c;我们将为大家介绍一款能够帮助你…

Elasticsearch优化索引映射和设置

在Elasticsearch的世界中&#xff0c;优化索引的映射&#xff08;mapping&#xff09;和设置&#xff08;settings&#xff09;对于提高搜索性能、存储效率和系统稳定性至关重要。本文将带您深入了解如何针对Elasticsearch的索引进行优化&#xff0c;帮助您构建更高效、更可靠的…

浅谈Mysql Innodb存储引擎

一、Mysql整体架构 二、MySQL 5.7 支持的存储引擎 类型 描述 MyISAM 拥有较高的插入、查询速度&#xff0c;但不支持事务 InnoDB 5.5版本后Mysql的默认数据库&#xff0c;5.6版本后支持全文索引&#xff0c;事务型数据库的首选引擎&#xff0c;支持ACID事务&#xff0c;支…

23、24年--项目立项管理

选择题、案例题、论文写作都有可能会考,需要会论文写作。 立项管理是对拟规划和实施的项目技术上的先进性、适用性,经济上的合理性、效益性,实施上的可能性、风险性以及社会价值的有效性、可持续性等进行全面科学的综合分析,为项目决策提供客观依据的一种技术经济研究活动。…

基于QT5实现的串口调试助手

代码仅供参考&#xff0c;实际效果是读串口缓冲区&#xff0c;但是老师水平不行&#xff0c;说好像&#xff08;&#xff1f;&#xff09;不能自己读自己&#xff0c;但是由于没有条件测试&#xff0c;后续没有进一步完善 main.cpp #include "widget.h"#include &l…

深入探索Java开发世界:Redis~类型分析大揭秘

文章目录 深入探索Java开发世界&#xff1a;Redis~类型分析大揭秘一、数据结构类型二、分布式锁类型三、事物命令类型四、事物三大特性类型 深入探索Java开发世界&#xff1a;Redis~类型分析大揭秘 Redis数据库基础知识&#xff0c;类型知识点梳理~ 一、数据结构类型 Redis是一…

【图像处理】1、使用OpenCV库图像轮廓的检测和绘制

OpenCV (Open Source Computer Vision Library) 是一个用于计算机视觉和图像处理的开源库。它提供了数百种用于图像和视频分析的算法&#xff0c;并被广泛应用于研究和商业领域。OpenCV 支持多种编程语言&#xff0c;包括 C、Python、Java 等&#xff0c;具有跨平台的特性&…

为什么不建议用外键?

在 MySQL 中&#xff0c;有些开发人员建议避免使用外键&#xff08;Foreign Keys&#xff09;&#xff0c;主要原因如下&#xff1a; 性能问题&#xff1a; 外键约束在插入、更新和删除操作时&#xff0c;会导致额外的检查和锁定&#xff0c;从而影响性能。尤其是在大批量数据操…

Vue项目生产环境的打包优化

Vue项目生产环境的打包优化 前言 在这篇文章我们讨论Vue项目生产环境的打包优化&#xff0c;并按步骤展示实际优化过程中的修改和前后对比。 背景 刚开始的打包体积为48.71M 优化 步骤一&#xff1a;删除viser-vue viser-vue底层依赖antv/g2等库一并被删除&#xff0c;…

【selenium 】操作元素

操作元素 元素操作鼠标操作键盘操作 元素操作 元素操作示例清空输入框clear()deiver.find_element_by_id(“username”).clear()输入文字send_keys()deiver.find_element_by_id(“username”).send_keys(‘zs’)元素点击 click()deiver.find_element_by_id(“login”).click()…

【高级篇】MySQL性能监控与故障排查:洞悉与优化(十六)

引言 在深入探讨了InnoDB引擎的内部机制后,我们转向了MySQL性能监控与故障排查的实践领域。这一章节将指导你如何运用一系列强大的监控工具和日志分析技巧,识别并解决数据库中的性能瓶颈和常见故障,为即将到来的MySQL与云环境的融合打下坚实基础。 一. 常用监控工具:透视…

720漫游快速入门

720云全景漫游制作工具自2014年8月上线后&#xff0c;为数十万创作者提供全景图片&全景视频&高清矩阵上传、编辑、分享一站式软件服务&#xff0c;获得众多创作者的青睐与认可&#xff0c;同时也承载了创作者越来越多的期望&#xff0c;为了给大家提供更灵活多样的功能…

【Linux】动/静态库的创建和使用

目录 一、动/静态库的概念回顾&#xff1a; 二、动态库与静态库的区别&#xff1a; 三、静态库的创建与使用&#xff1a; 1、Linux静态库命名规则&#xff1a; 2、静态库的创建和使用&#xff1a; 四、动态库的创建与使用&#xff1a; 1、Linux动态库命名规则&#xff1…

如何根据经纬度查询所在城市

参考文献&#xff1a; https://www.jianshu.com/p/893d359dea0f

【python】pop()函数

python pop() &#xff0c;如何在Python的列表或数组中移除元素 使用 pop() 从列表中删除元素 pop() 语法概述 pop() 方法的语法如下&#xff1a; list_name.pop(index)list_name&#xff1a;列表变量名&#xff1b;内置的 pop() 方法仅需要一个可选参数&#xff1b;可选参…