0


selenium元素定位总结 - xpath定位高级用法

文章目录

1.8种元素定位方法

  • find_element_by_id:通过ID进行匹配查找,只返回匹配到的一个元素
  • find_element_by_name:通过name进行匹配查找,只返回匹配到的一个元素
  • find_element_by_xpath:通过xpath进行匹配查找,只返回匹配到的一个元素
  • find_element_by_link_text:通过链接内容进行匹配查找,只返回匹配到的一个元素
  • find_element_by_partical_link_text:通过部分链接内容进行匹配查找,只返回匹配到的一个元素
  • find_element_by_tag_name:通过标签名称进行匹配查找,只返回匹配到的一个元素
  • find_element_by_class_name:通过class名称进行匹配查找,只返回匹配到的一个元素
  • find_element_by_css_selector:通过CSS选择器进行匹配查找,只返回匹配到的一个元素

2.xpath定位的高级用法

表达式描述/从根节点选取,也就是当前节点的最顶层(默认情况下当前节点是 html 最顶层,若从某元素开始,当前节点为此元素)//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置.选取当前节点. .选取当前节点的父节点@选取属性

1. 绝对路径

以 “/” 开头, 让xpath 从文档的根节点开始解析

driver.find_element_by_xpath(“html/body/div/form/input”)

2.相对路径

以"//" 开头, 让xpath 从文档的任何元素节点开始解析(也就是说每个节点都作为起点找一下

driver.find_element_by_xpath(“//body/div/form/input”)

3. 索引定位

driver.find_element_by_xpath(“//input[1]”)

4.使用XPATH的属性值定位元素

driver.find_element_by_xpath(“//input[@id=‘username’]”)
driver.find_element_by_xpath(“//input[@type=‘submit’][@name=‘sub1’]”)
driver.find_element_by_xpath(“//input[@type=‘submit’ and @name=‘sub1’]”)
driver.find_element_by_xpath(“//input[@type=‘submit’ or @name=‘sub1’]”)

5.使用XPATH的属性名称定位元素

查找所有input标签中含有type属性的元素
driver.find_element_by_xpath(“//input[@type]”)
查找所有a标签中含有onclick属性的元素
driver.find_element_by_xpath(“//a[@onclick]”)

6.使用任意值来匹配属性及元素

匹配所有input元素中含有属性的值为readonly的元素
driver.find_element_by_xpath(“//input[@*=‘readonly’]”))

7.使用模糊的属性值匹配

starts-with()

匹配一个属性开始位置的关键字,是模糊定位的一种。

匹配id以submit开头的元素,如:id=‘submit’
driver.find_element_by_xpath(“//input[starts-with(@id,‘submit’)]”)

ends-with()

匹配一个属性结束位置的关键字,是模糊定位的一种。

匹配id以submit结尾的元素,如:id=‘submit’
driver.find_element_by_xpath(“//input[ends-with(@id,‘submit’)]”)

contains()

匹配一个属性值中包含的字符串,也是模糊定位的一种。

匹配id中含有submit的元素,如:id=‘submit’
driver.find_element_by_xpath(“//input[contains(@id,‘submit’)]”)

匹配name属性中包含na关键字的页面元素
driver.find_element_by_xpath(“//input[contains(@name,‘na’)]”)

text()

根据文本信息匹配元素位置。

表示div元素->form元素->input元素的最后一个子元素,得到id值为e2的E元素
driver.find_element_by_xpath(“//div[@class=‘class3’][contains(text(),‘div2’)]/…/text()”)

last()

函数位置定位。

表示div元素->form元素->input元素的最后一个子元素,得到id值为e2的E元素
driver.find_element_by_xpath(“/div/form/input[last()]”)

8.过虑某个元素

name()

获取标签名称。

表示过虑掉在 div id='query_reulst_box' 的下的 style 标签和 meta 标签
driver.find_element_by_xpath("//div[@id='query_reulst_box']/*[not(name()='style' and name()='meta')]//text())

9.常用函数

parent 选取当前节点的父节点

//*[@id=“content_views”]/p[51]/span[1]/parent::p

ancestor 选取当前节点的所有先辈(父、祖父等)

//*[@id=“content_views”]/p[51]/span[1]/ancestor-or-self::div

descendant选取当前节点的所有后代元素(子、孙等)

//*[@id=“content_views”]/descendant::span

descendant-or-self选取当前节点的所有后代元素(子、孙等)以及当前节点本身

//*[@id=“content_views”]/p[51]/descendant-or-self::p

preceding 选取文档中当前节点的开始标签之前的所有节点

//*[@id=“content_views”]/p[51]/preceding::p

preceding-sibling选取当前节点之前的所有同级节点

//*[@id=“content_views”]/p[51]/span[2]/preceding-sibling::span

following 选取文档中当前节点的结束标签之后的所有节点(包括自己及自己的后代元素

//*[@id=“content_views”]/p[51]/following::p

following-sibling选取当前节点之后的所有同级节点

//*[@id=“content_views”]/p[51]/span[2]/following-sibling::span

3.xpath定位实例

<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>上课啦</title></head><body><pid="abc">浔阳江头夜送客,枫叶荻花秋瑟瑟1</p><pid="abd">浔阳江头夜送客,枫叶荻花秋瑟瑟2</p><inputname="a1"><div><select><option>主人下马客在船,举酒欲饮无管弦</option><option>醉不成欢惨将别,别时茫茫江浸月</option><option>忽闻水上琵琶声,主人忘归客不发</option></select></div><ahref="http://www.baidu.com">访问百度</a><span>君既为府吏,守节情不移</span><spanclass="a2">鸡鸣入机织,夜夜不得息</span><div><table><tr><td>
                头上玳瑁光,腰若流纨素
            </td></tr><tr><td>
                出师未捷身先死,长使英雄泪满襟
            </td></tr></table></div></body></html>
# -*- coding: utf-8 -*-# @project : day5# @author: lw# @file: study.py# @ide: PyCharm# @time: 2021/8/1 19:30import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager

service = ChromeService(executable_path=ChromeDriverManager().install())

driver = webdriver.Chrome(service=service)
fileHtml1 ="file:///Users/liwei/Downloads/%E8%85%BE%E8%AE%AF%E8%AF%BE%E5%A0%8237-38%E6%9C%9F2020-7-8/day2/test.html"
driver.get(fileHtml1)

element_absolute = driver.find_elements("xpath","//body/p")print("Xpath 绝对径定位: ")for element in element_absolute:print(element.text)print("================================================")print("Xpath 相对路径定位: ")
element_xiangdui = driver.find_elements("xpath","//body/p")for element in element_xiangdui:print(element.text)print("================================================")print("Xpath 索引定位: ")
element_index = driver.find_elements("xpath","//*[@id][2]")for element in element_index:print(element.text)print("================================================")print("XPATH的属性名称元素: ")
element_attribute = driver.find_elements("xpath","//*[@id]")for element in element_attribute:print(element.text)print("================================================")print("XPATH的属性值定位元素: ")
element_attributeValue = driver.find_elements("xpath","//*[@id='abc']")for element in element_attributeValue:print(element.text)print("================================================")print("使用任意值来匹配属性及元素: ")
element_any = driver.find_elements("xpath","//*[@*='a2']")for element in element_any:print(element.text)print("================================================")print("使用模糊的属性值匹配: ")
element_starts = driver.find_elements("xpath","//*[starts-with(@id,'a')]")# end是新语法不是所有浏览器都支持# element_ends = driver.find_elements("xpath", "//*[ends-with(@id,'d')]")
element_contains = driver.find_elements("xpath","//*[contains(@id,'a')]")for element in element_starts:print("starts-with(@id,'a')"+ element.text)# for element in element_ends:#     print("ends-with(@id,'d')" + element.text)for element in element_contains:print("contains(@id,'a')"+ element.text)print("================================================")print("根据文本信息匹配元素位置: ")
element_text = driver.find_element("xpath","//*[text()='访问百度']")print(element_text.text)print("================================================")print("last()元素位置: ")
element_last = driver.find_element("xpath","//*[@id][last()]")print(element_last.text)print("================================================")print("name函数: ")
element_name = driver.find_elements("xpath","//*[not (name()='p' or name()='div')]//*[name()='select']")for element in element_name:print(element.text)print("================================================")print("常见位置函数: ")
element_parent = driver.find_element("xpath","//*[@id]/parent::body")print("parent"+element_parent.tag_name)
element_ancestor = driver.find_element("xpath","//td/ancestor::tbody")print("ancestor"+element_ancestor.tag_name)
element_descendant = driver.find_element("xpath","//div[1]/descendant::option")print("element_descendant"+ element_descendant.text)'''
//div[1]/descendant::option[3]/preceding::option
//div[1]/descendant::option[3]/preceding-sibling::option
//div[1]/descendant::option[1]/following::option
//div[1]/descendant::option[1]/following-sibling::option

'''

driver.quit()

Xpath 绝对径定位:
浔阳江头夜送客,枫叶荻花秋瑟瑟1
浔阳江头夜送客,枫叶荻花秋瑟瑟2
================================================
Xpath 相对路径定位:
浔阳江头夜送客,枫叶荻花秋瑟瑟1
浔阳江头夜送客,枫叶荻花秋瑟瑟2
================================================
Xpath 索引定位:
浔阳江头夜送客,枫叶荻花秋瑟瑟2
================================================
XPATH的属性名称元素:
浔阳江头夜送客,枫叶荻花秋瑟瑟1
浔阳江头夜送客,枫叶荻花秋瑟瑟2
================================================
XPATH的属性值定位元素:
浔阳江头夜送客,枫叶荻花秋瑟瑟1
================================================
使用任意值来匹配属性及元素:
鸡鸣入机织,夜夜不得息
================================================
使用模糊的属性值匹配:
starts-with(@id,‘a’)浔阳江头夜送客,枫叶荻花秋瑟瑟1
starts-with(@id,‘a’)浔阳江头夜送客,枫叶荻花秋瑟瑟2
contains(@id,‘a’)浔阳江头夜送客,枫叶荻花秋瑟瑟1
contains(@id,‘a’)浔阳江头夜送客,枫叶荻花秋瑟瑟2
================================================
根据文本信息匹配元素位置:
访问百度
================================================
last()元素位置:
浔阳江头夜送客,枫叶荻花秋瑟瑟2
================================================
name函数:
主人下马客在船,举酒欲饮无管弦
醉不成欢惨将别,别时茫茫江浸月
忽闻水上琵琶声,主人忘归客不发
================================================
常见位置函数:
parentbody
ancestortbody
element_descendant主人下马客在船,举酒欲饮无管弦

Process finished with exit code 0


本文转载自: https://blog.csdn.net/weixin_42439274/article/details/135900014
版权归原作者 糖果店的幽灵 所有, 如有侵权,请联系我们删除。

“selenium元素定位总结 - xpath定位高级用法”的评论:

还没有评论