【UI_Automation_Selenium】 Xpath元素定位

验证Xpath正确性

  1. F12打开开发者工具,ctrl+F搜索输入Xpath路径,如果定位到的元素只有一个且为所需,则说明定位正确。
  2. 在需要定位的页面,按F12后,切换至console列下,输入表达式。语法 $x(“path_selector”)

常用的表示方法:
@ 用在标签之前的属性之前,表示选取属性 //标签[@属性名=属性值]
… 选取当前节点的父节点
[x] 表示选取第x个 //div/input[2] 表示该div下面的第二个input
/ 用在开始表示绝对路径,从根节点选取;用在中间表示前一个节点的下一级
// 用在开始表示从当前节点开始(相对路径);用在中间表示所有子节点,不用考虑是否直接子节点
*号可以省略具体的标签名称,但元素层级关系必须体现出来如:

//*[@id='J_login_form']/dl/dt/input[@id='j_password']
 =>用*省略标签名称可以写成
//*[@id='J_login_form']/*/*/input[@id='j_password']

常用写法:
属性定位: //标签[@属性名=属性值]
文本定位: //标签[text()=精确内容]
contains()函数定位(如果属性值或者文本内容过长,可以选取其中一部分定位):
//标签[contains(@属性,属性值)] or //标签[contains(text(),部分内容)]

xpath基本定位法

1.使用id定位

driver.find_element_by_xpath('//input[@id="kw"]')

2.使用class定位

driver.find_element_by_xpath('//input[@class="s_ip"]')

3.常用的8种方式结合xpath均可以定位(name,tag_name,link_text,partial_link_text等)

xpath相对路径/绝对路径定位

1.相对路径定位
以//开头,表示从当前节点开始,如:

//form//input[@name="phone"]

2.绝对路径
以/开头,从根节点开始选取,比较繁琐,一般不建议使用如:

/html/body/div/a

xpath文本、模糊、逻辑定位

1.文本定位
使用text()元素的text内容,如:

//button[text()="登录"]

2.模糊定位
使用contains()包含函数,如:

//button[contains(text(),"登录")]
//button[contains(@class,"btn")]

使用starts-with,ends-with,如:

//button[starts-with(@class,"btn")]
//input[ends-with(@class,"-special")]

3.逻辑运算符and,or

//input[@name="phone" and @ datatype = "m"]

xpath轴定位

ancestor:祖先节点,包括父节点
parent:父节点
preceding-sibling:当前元素节点标签之前的所有兄弟节点(同级)
preceding:当前元素节点标签之前的所有节点
follow-sbling:当前元素节点标签之后的所有兄弟节点(同级)
following:当前元素节点标签之后的所有节点

使用方法
轴名称::节点名称(前后的定位与之前一致,用/隔开即可)
使用较多的场景:页面显示为一个表格样式数据列
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By options = webdriver.ChromeOptions() options.add_argument('--ignore-certificate-errors') options.add_experimental_option('excludeSwitches', ['enable-automation']) options.add_argument("--disable-blink-features=AutomationControlled") options.add_argument('--disable-gpu') # 谷歌文档提到需要加上这个属性来规避bug options.add_argument('blink-settings=imagesEnabled=false') # 不加载图片, 提升速度 # options.add_argument('--headless') # 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败 options.binary_location = './chrome-win/chrome.exe' driver_path = Service("chromedriver.exe") driver = webdriver.Chrome(service=driver_path, options=options) # 打开网站 print('正在登录!') driver.get('http://www.weather.com.cn/jiangsu/index.shtml') elements = driver.find_elements(By.XPATH, '''//*[@id="forecastID"]/dl/dd/a/b'''),from PySide2.QtWidgets import QApplication,QMainWindow from ui_main import Ui_MainWindow from PySide2.QtCore import QUrl class MainWindow(QMainWindow): def init(self): super().init() # 使用ui文件导入定义界面类 self.ui = Ui_MainWindow() # 初始化界面 self.ui.setupUi(self) # 使用界面定义的控件,也是从ui里面访问 self.ui.webview.load(QUrl('about:blank')) # 获取页面对象 page = self.ui.webview.page() # 设置页面缩放比例 page.setZoomFactor(1) self.ui.webview.load(QUrl('http://www.python3.vip/')) app = QApplication([]) mainw = MainWindow() mainw.show() app.exec_(),请合并这两段代码
06-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值