注意:如果class name是一个复合类(存在多个属性值,每个属性值以空格隔开),则只能使用其中的任意一个属性值进行定位,但是不建议这么做,因为可能会定位到多个元素 。
例如:下面这个标签的class属性值为bg s_btn btn_h btnhover
<input class="bg s_btn btn_h btnhover" type="text" name="key">
则只能使用复合类的任意一个单词去定位:
driver.find_element(By.CLASS_NAME,"bg") # 正确示范driver.find_element(By.CLASS_NAME,"bg s_btn btn_h btnhover") # 错误示范 NoSuchElementException
TAG_NAME通过元素的标签名称来定位,例如input标签、button标签、a标签等 。
由于存在大量标签,并且重复性高,因此必须确定其能够代表目标元素唯一性后,方可使用 。如果页面中存在多个相同标签,默认返回第一个标签元素 。一般情况下标签重复性过高,要精确定位,都不会选择tag_name定位方式 。
语法:
driver.find_element(By.TAG_NAME, "标签名称")
举栗:
driver.find_element(By.TAG_NAME, "input")
LINK_TEXT定位超链接标签 。只能使用精准匹配(即a标签的全部文本内容),该方法只针对超链接元素(a 标签),并且需要输入超链接的全部文本信息 。
例如:下面这个a标签的全部文本内容为联系客服
<a href="http://XXX">联系客服</a>
语法:
driver.find_element(By.LINK_TEXT, "a标签的全部文本内容")
举栗:
# author: 测试蔡坨坨# datetime: 2022/10/22 20:27# function: link_text定位import timefrom selenium import webdriverfrom selenium.webdriver.common.by import Bydriver = webdriver.Chrome()driver.get("http://127.0.0.1")driver.maximize_window()# 点击联系客服driver.find_element(By.LINK_TEXT, "联系客服").click()
PARTIAL_LINK_TEXT定位超链接标签,与LINK_TEXT不同的是它可以使用精准或模糊匹配,也就是a标签的部分文本内容,如果使用模糊匹配最好使用能代表唯一的关键词,如果有多个元素,默认返回第一个 。
例如:下面这个a标签的全部文本内容为“联系客服”,模糊匹配就可以使用a标签的部分文本内容,比如联系、客服、联、服……
<a href="http://XXX">联系客服</a>
语法:
driver.find_element(By.PARTIAL_LINK_TEXT, "a标签的部分文本内容")
举栗:
# author: 测试蔡坨坨# datetime: 2022/10/22 20:34# function: partial_link_text定位器import timefrom selenium import webdriverfrom selenium.webdriver.common.by import Bydriver = webdriver.Chrome()driver.get("http://127.0.0.1")driver.maximize_window()# 点击联系客服driver.find_element(By.PARTIAL_LINK_TEXT, "联系").click()
XPATH定义XML Path Language 的简称,用于解析XML和HTML 。(不仅可以解析XML还可以解析HTML,因为HTML与XML是非常相像的,XML多用于传输和存储数据,侧重于数据,HTML多用于显示数据并关注数据的外观)
Xpath策略有多种,无论使用哪一种策略,定位的方法都是同一个,不同策略只决定方法的参数的写法 。
Xpath不仅可以用于Selenium,还适用于Appium,是一个万能的定位方式 。
Xpath有一个缺点,就是速度比较慢,比CSS_SELECT要慢很多,因为Xpath是从头到尾一点一点去遍历 。
绝对路径从最外层元素到指定元素之间所有经过元素层级的路径 ,绝对路径是以/html根节点开始,使用 / 来分割元素层级的语法,比如:/html/body/div[2]/div/div[2]/div[1]/form/input[1](因为会有多个div标签,所以用索引的方式定位div[2],且XPath的下标是从1开始的,例如:/bookstore/bool[1]表示选取属于bookstore子元素的第一个book元素,除了用数字索引外,还可以用last()、position()函数来表达索引,例如:/bookstore/book[last()]表示选取属于bookstore子元素的最后一个book元素,/bookstore/book[last()-1]表示选取属于bookstore子元素的倒数第二个book元素,/bookstore/book[position()?]表示选取最前面的两个属于bookstore元素的子元素的book元素)
经验总结扩展阅读
- 三 Selenium+Python系列 - 常见浏览器操作
- 二 Selenium+Python系列 - 元素定位那些事
- 厨房小蟑螂怎么彻底消灭
- 怎么快速学会河南话
- 恋爱不懂及时止损,会被伤得彻底的星座
- 感情中慢慢才学会信任对方的星座
- 为爱不择手段而彻底失去爱情的星座
- selenium4-定位单个页面元素
- 感情里学会经营和思考的星座女
- 家里有蛾蠓怎么彻底清除