ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[selenium]元素定位

2022-06-24 18:03:47  阅读:175  来源: 互联网

标签:xpath 定位 元素 selenium value element find


前言

selenium提供八种元素定位的方法:

  • find_element_by_id(): 通过id定位。一个页面中的id是唯一的。有id的话尽量使用id定位。
  • find_element_by_xpath(): 通过xpath语法定位(常用)
  • find_element_by_link_text(): 通过链接文本定位
  • find_element_by_partial_link_text(): 通过部分链接文本定位
  • find_element_by_name(): 通过标签名称定位
  • find_element_by_tag_name(): 通过标签名称定位
  • find_element_class_name(): 通过class name定位
  • find_element_by_css_selector(): 通过css选择器(常用)

当前selenium版本(v4.1.5)更推荐使用find_element(by=By.xx, value="")的方式

通过ID定位元素

按照W3C的规范,元素的ID在页面上是唯一的,因此元素如有ID,通过ID去定位一般是最方便的,也是最快的。
但是,浏览器允许元素没有ID或者ID不唯一,所以还需要综合利用其它方法去定位元素。

  • 示例
from selenium.webdriver.common.by import By

# 点击id为123456的元素
driver.find_element(by=By.ID, value="123456").click()

通过name属性定位元素

元素的name属性是常用的一种定位锚点,但是需要注意,页面上name属性的值不一定是唯一的。

假设元素的网页源代码为:

<input name="next" type="submit" value="Login" />

定位方式:

from selenium.webdriver.common.by import By

# 定位name属性为next的元素,然后输入123456
driver.find_element(by=By.NAME, value="next").send_keys("123456")

通过XPATH定位元素

xpath是xml页面中定位元素的一种方法,在html中也适用。通过xpath可以定位到绝大部分元素。xpath语法需要花大概十几分钟时间简单学习下。W3C School - xpath在线文档

假设元素的网页源代码为:

<input name="next" type="submit" value="Login" />

定位方式:

from selenium.webdriver.common.by import By

# 通过相对路径定位属性namee为next、属性type为submit的input元素
# 然后输入123456
driver.find_element(by=By.XPATH, value="//input[@name='next' and @type='submit']").send_keys("123456")

xpath基本概念

  • 父子节点
  • 绝对路径和相对路径
  • xpath方法:
    • contains()
    • text()
    • starts-with()

示例

from selenium.webdriver.common.by import By
# 根据页面文字定位元素
driver.find_element(by=By.XPATH, value="//span[contains(text(), '资金业务系统')]").click()

通过css选择器定位元素

css选择器和xpath都可以定位复杂的页面元素,但是css选择器不依赖DOM。当页面集成了很多的CSS元素,CSS选择器的性能比xpath要更好。

# 基本语法
driver.find_element(by=By.CSS_SELECTOR, value='')

# 定位标签为p,id为press的元素
# <p id="press"></p>
value='p#press'
## 或者
value="p[id='press']"
## 或者
value="p#id='press'"

# 定位标签为p,标签文本包含press的元素
# <p>press</p>
value="p:contains('press')"

# 定位多属性的元素
# <p class ="container" id="apress" style="align-self: center;"></p>
value="[class='container'][id='apress'][style='align-self:center']"

# 定位子元素
# <div id="cars">
#     <a href="#aston_martin">Aston</a>
# </div>
value="div#cars a"

# 多子元素中定位
# <ul id="cars">
#     <li>Aston Martin</li>
#     <li>BMW</li>
#     <li>Chevy</li>
#     <li>Dodge</li>
# </ul>
# 定位第二个li
value="ul#cars li:nth-of-type(2)"
# 定位最后一个li
value="ul#cars li:last-child"

通过锚标签定位元素

假设网页源代码为:

<a href="python.html">Python</a>

定位方法:

driver.find_element(by=By.LINK_TEXT, value="Python").click()

通过部分锚标签定位元素

driver.find_element(by=By.PARTIAL_LINK_TEXT, value="Pyt").click()

通过tag定位元素

假设需要定位网页标题

elem1 = driver.find_element(by=By.TAG_NAME, value="Title")

通过class名定位元素

假设元素的网页源代码为:

<p class="text-justify">Python with Selenium</p>

定位方式:

elem = driver.find_element(by=By.CLASS_NAME, value="text-justify")

标签:xpath,定位,元素,selenium,value,element,find
来源: https://www.cnblogs.com/XY-Heruo/p/16409791.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有