selenium之find_element_by_xpath定位元素

一 方法

selenium为定位元素提供了较多方法,大致分为单元素定位和多元素定位.

# 查找单个元素:find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
# 查找多个元素
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
# 两个私有方法
find_element
find_elements

二 用法

2.1 find_element和find_elements用法

from selenium.webdriver.common.by import Bydriver.find_element(By.XPATH, '//button[text()="Some text"]')
driver.find_elements(By.XPATH, '//button')

按各种分类的属性如下:

XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"

2.2 按IP定位

login_form = driver.find_element_by_id('loginForm')

使用此策略,将返回id属性值与位置匹配的第一个元素。如果没有元素具有匹配的id属性,NoSuchElementException则将引发a。

2.3 按name定位

username = driver.find_element_by_name('username')
password = driver.find_element_by_name('password')

使用此策略,将返回name属性值与位置匹配的第一个元素。如果没有元素具有匹配的name属性,NoSuchElementException则将引发a。

2.4 通过XPath定位

使用XPath的主要原因之一是,当您没有想要查找的元素的合适的id或name属性时。您可以使用XPath以绝对术语(不建议使用)定位元素,也可以相对于具有id或name属性的元素定位。XPath定位器还可用于通过id和name以外的属性指定元素。

绝对XPath包含来自根(html)的所有元素的位置,因此,仅对应用程序进行一点点调整就可能导致失败。通过找到具有id或name属性的附近元素(最好是父元素),您可以根据关系找到目标元素。这种更改的可能性要小得多,并且可以使您的测试更可靠。

<html><body><form id="loginForm"><input name="username" type="text" /><input name="password" type="password" /><input name="continue" type="submit" value="Login" /><input name="continue" type="button" value="Clear" /></form>
</body>
<html>

如下定位:

# 绝对路径(如果仅对HTML进行少许更改,则会中断)
login_form = driver.find_element_by_xpath("/html/body/form[1]")
# HTML中的第一个表单元素
login_form = driver.find_element_by_xpath("//form[1]")
# 具有名为id的属性和值为loginForm的表单元素
login_form = driver.find_element_by_xpath("//form[@id='loginForm']")

2.4.1 绝对路径(如果仅对HTML进行少许更改,则会中断)

login_form = driver.find_element_by_xpath("/html/body/form[1]")

2.4.2 元素及其属性定位

查找具体的元素,必须在前面输入标准开头//,表示从当前节点寻找所有的后代元素

//div/*          div下面的所有的元素//div//p         先在整个文档里查找div,再在div里查找p节点(只要在内部,不限定是否紧跟) ;等价于 css_selector里的('div p')//div/p          p是div的直接子节点; 等价于 css_selector里的('div > p')//*[@style]      查找所有包含style的所有元素,所有的属性要加@;  等价于 css_selector里的('*[style]')//p[@spec='len'] 必须要加引号;等价于 css_selector里的("p[spec='len']")//p[@id='kw']    xpath中对于id,class与其他元素一视同仁,没有其他的方法

2.4.3 选择节点位置

//div/p[2]                   选择div下的第二个p节点 ;等价于css_selector里的div>p:nth-of-type(2)  符合p类型的第二个节点//div/*[2]                   选择div下第二个元素//div/p[position()=2]        position()=2   指定第二个位置;  等价于上面的 //div/p[2] position()>=2      位置大于等于2position()<2       位置小于2position()!=2     位置不等于2//div/p[last()]              选择div下的倒数第一个p节点; last()倒数第一个//div/p[last()-1]            选择div下的倒数第二个p节点;//div/p[position()=last()]   倒数第一个//div/p[position()=last()-1] 倒数第二个//div/p[position()>=last()-2]倒数第一个,第二个,第三个

2.4.4 组合定位

//p | //button                       选择所有的p和button,等价于css_selector里的 p, button//input[@id='kw' and @class='su']    选择id=kw 并且 class=su的input元素

2.4.5 兄弟节点

相邻后面的兄弟节点的选择:following-sibling::    两个冒号//div/following-sibling::p    选择div里相邻的p节点相邻前面的兄弟节点的选择:preceding-sibling::         此方法在css_selector中没有//div/preceding-sibling::p[2]   选择div里前面相邻的第二个节点,不加[2]选择的是前面的所有的p节点

2.4.6 父节点

//p[@spec='len']/..      选择p节点的上层节点       此方法在css_selector中没有//p[@spec='len']/../..   上层节点的上层节点

2.5 通过链接文本找超链接

<html><body><p>Are you sure you want to do this?</p><a href="continue.html">Continue</a><a href="cancel.html">Cancel</a>
</body>
<html>

continue_link = driver.find_element_by_link_text('Continue')
continue_link = driver.find_element_by_partial_link_text('Conti')

使用此策略,将返回链接文本值与位置匹配的第一个元素。如果没有元素具有匹配的链接文本属性,NoSuchElementException则将引发a。

2.6 通过标签名称定位

<html><body><h1>Welcome</h1><p>Site content goes here.</p>
</body>
<html>

heading1 = driver.find_element_by_tag_name('h1')

使用此策略,将返回具有给定标签名称的第一个元素。如果没有元素具有匹配的标签名称,NoSuchElementException 则将引发a。

2.7 通过class定位

 <body><p class="content">Site content goes here.</p>
</body>
<html>
content = driver.find_element_by_class_name('content')

使用此策略,将返回具有匹配类属性名称的第一个元素。如果没有元素具有匹配的类属性名称,NoSuchElementException则将引发a。

2.8 通过CSS选择器定位

<html><body><p class="content">Site content goes here.</p>
</body>
<html>
content = driver.find_element_by_css_selector('p.content')

使用此策略,将返回具有匹配CSS选择器的第一个元素。如果没有元素具有匹配的CSS选择器,NoSuchElementException则将引发a。

感谢Cyberverse及selenium

结束!

selenium之find_element_by_xpath定位元素相关推荐

  1. python selenium定位元素方法,python + selenium 练习篇 - 定位元素的方法

    1.利用ID定位元素(能直接通过ID来定位的元素比较少) # coding=utf-8 from selenium import webdriver driver = webdriver.Chrome ...

  2. Selenium Tips - CSS定位元素

    Selenium Tips - CSS定位元素 原文: http://sauceio.com/index.php/2010/01/selenium-totw-css-selectors-in-sele ...

  3. python + selenium 练习篇 - 定位元素的方法

    1.利用ID定位元素(能直接通过ID来定位的元素比较少) # coding=utf-8 from selenium import webdriver driver = webdriver.Chrome ...

  4. Selenium+iframe准确定位元素

    简单介绍 我们发现该网站有两个框架: 网页代码如下所示: 我们发现iframe对应着单独的一个框架,因此我们定位元素时,要判断该元素有没有嵌套在iframe框架中. 程序示例 以天猫登陆界面为例,网址 ...

  5. java selenium一一操作定位元素

    java selenium操作定位元素 1.元素选择策略 1.1.使用选择器的提示 2.定位元素 3.定位多个元素 4.相对定位 4.1.above() 1.元素选择策略 WebDriver 中有 8 ...

  6. Selenium使用xpath定位元素

    参考资料: [web自动化测试]xpath元素定位 核心用法 接下来是使用 xpath 必须掌握的核心知识点,只要掌握好这些知识点,基本上能定义到想要的元素. //input[@name='accou ...

  7. selenium svg标签定位元素

    背景: 近期在写ui自动化用例时,遇到问题,元素定位不了.初步尝试直接在页面中获取svg中包含元素的xpath,直接利用selenium方法访问,无法捕获到相关元素信息. self.driver.fi ...

  8. [Python从零到壹] 九.网络爬虫之Selenium基础技术万字详解(定位元素、常用方法、键盘鼠标操作)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  9. python网页元素定位_用Selenium进行网页元素定位以及常用的定位元素的方法

    用Selenium进行网页元素定位 一.前提条件: 下载.安装Selenium 二.编写定位网页元素的脚本(这里以定位百度网页的元素举例) 1.新建文本文档(可以用任意的文本编辑器,我这里用的是Pyc ...

最新文章

  1. C#组件开发 -- 索引器
  2. 使用mount挂载一个windows的共享
  3. 《MySQL 8.0.22执行器源码分析(1)——execute iterator一些记录》
  4. cocos 禁掉快速点击_win10系统快速运行debug程序的技巧
  5. 做web前端的小伙伴注意了,未来这些发展方向可以试试!
  6. rpm apache2 啟動vhost .htaccess讀取問題
  7. js鼠标事件大全-Javascript鼠标事件大全
  8. Winform 下拉框绑定问题
  9. C#SHA1算法及注意事项
  10. 恶作剧批处理(bat)代码解析
  11. 用计算机编纂家谱的作用,家谱软件的比较
  12. con 元器件符号_multisim元器件符号速查
  13. centos7搭建单机kafka,开启SASL/PLAIN加密,并使用kafka tool 登录
  14. Bluetooth 5 新功能概述
  15. (十二)幸福之家 - 2
  16. 统计学习第十四周-方差分析
  17. Linux调整网卡MAC地址(指令)
  18. 人体运动检测与跟踪(转)
  19. 驱动力来自哪里——献给迷茫的程序员
  20. dingding(钉钉)+sonar(代码质量管理工具)通知并打包成docker容器运行

热门文章

  1. Android实现百度地图定位(墨雪亲测)
  2. C语言入门(前期准备工作)——超级详细的建议和教学,带你顺利跨越编程门槛
  3. Ubuntu下FLV转为MP4
  4. Oracle EBS专业术语与名词解释
  5. Windows文件夹用“命令行窗口”打开
  6. JAVA性能优化,从此不再重启tomcat服务
  7. CVPR 2022 | 商汤/上交/港中文提出U2PL:使用不可靠伪标签的半监督语义分割
  8. Linux 系统 CPU 占用率较高问题排查思路
  9. Python:PyQt 时间组件
  10. apollo7.0------浅谈激光雷达运动补偿(二)--计算解析