ICode9

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

Selenium(6):元素定位_XPATH定位

2021-11-24 13:03:56  阅读:150  来源: 互联网

标签:XPATH 定位 webdriver Selenium driver path os


XPATH是什么

  XPATH是一门在XML文档中查找信息的语言,XPATH可用来在XML文档中对元素和属性进行遍历,主流的浏览器都支持XPATH,因为HTML页面在DOM中表示为XHTML文档。Selenium WebDriver支持使用XPATH表达式来定位元素。

Xpath常用如下6种定位元素的方法:

 

 

1、通过绝对路径定位

  绝对路径的开头是一个斜线(/),从网页的根节点html开始,逐层去查找需要定位的元素。

  此方法缺点显而易见,当页面元素位置发生改变时,都需要修改,因此,并不推荐使用。

代码如下:

以百度首页的搜索框为例

import os
from selenium import webdriver
from selenium.webdriver.common.by import By

current_path = os.path.dirname(os.path.abspath(__file__))  # 当前路径
driver_path = os.path.join(current_path,'../webdriver/chromedriver.exe')  # driver路径
driver = webdriver.Chrome(executable_path=driver_path)  # Firefox,Ie等

driver.get('https://www.baidu.com/')  # 打开网站

# 绝对路径定位:/ 开头
# 从网页正文的html节点,一直找到元素所在的位置的一种定位方法(从上往下,同层级下标表示)
# 一般不用,难维护,谷歌浏览器自带了复制 绝对路径xpath的功能
driver.find_element(By.XPATH,'/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input').send_keys('python')

备注:当同一层次有多个相同的元素时,使用下标区分,下标从1开始;并且注意网页登录状态和非登录状态的html的绝对路径是不一样的

2、通过相对路径定位

  相对路径的开头是两个斜线(//),表示文件中所有符合模式的元素都会被选出来,即使是处于树中不同的层级也会被选出来。

代码如下:

以百度首页的搜索框为例

import os
from selenium import webdriver
from selenium.webdriver.common.by import By

current_path = os.path.dirname(os.path.abspath(__file__))  # 当前路径
driver_path = os.path.join(current_path,'../webdriver/chromedriver.exe')  # driver路径
driver = webdriver.Chrome(executable_path=driver_path)  # Firefox,Ie等

driver.get('https://www.baidu.com/')  # 打开网站

# 相对路径定位:// 开头
# 在网页正文中,通过独一无二丶局部路径表示元素信息的一种定位方法(从下往上,一层一层试)
driver.find_element(By.XPATH,'//span[1]/input').send_keys('JAVA')  # 最简相对路径
driver.find_element(By.XPATH,'//form/span[1]/input').send_keys('JAVA')  # 最简相对路径

备注:以上都可以定位到百度搜索框,相对路径的长度和开始位置并不受限制,可以采用从后往前逐层定位直到定位到即可的方式去定位。

3、通过元素索引定位

遇到同层级相同标签元素时,可以使用索引(下标)表示,索引的初始值为1

标签:XPATH,定位,webdriver,Selenium,driver,path,os
来源: https://www.cnblogs.com/YouJeffrey/p/15597577.html

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

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

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

ICode9版权所有