世界上最远的距离大概就是明明看到一个页面元素站在那里,但是我却定位不到!!

selenium定位元素的方法有很多种,像是通过id、name、class_name、tag_name、link_text等等,但是这些方法局限性太大,拿id属性来说,首先一定不会每个元素都有id属性,其次元素的id属性也不一定是固定不变的。所以这些方法了解一下即可,我们真正需要熟练掌握的是通过xpath和css定位,一般只要掌握一种就可以应对大部分定位工作了。

下面总结一下xpath的定位方法,结合自己练习的实例加深一下了解

一、首先需要了解一下xpath的概念和基本语法

网上关于xpath的教程比较少,可以看一下菜鸟教程和w3cschool的相关资料:http://www.runoob.com/xpath/xpath-tutorial.html、http://www.w3school.com.cn/xpath/index.asp

二、常用的xpath定位方法

1.利用标签内的属性进行定位

(1)通过id属性

xpath = "//a[@id='start_handle']"
//a 表示选取所有a元素,加上[@id='start_handle']表示选取id属性为'start_handle'的a元素
(2)通过name属性定位

xpath = "//input[@name='custName']"

概括:

xpath = "//标签名[@属性='属性值']"

属性判断条件:最常见为id,name,class等等,属性的类别没有特殊限制,只要能够唯一标识一个元素即可。

当某个属性不足以唯一区别某一个元素时,也可以采取多个条件组合的方式,如下:

xpath= "//input[@type='XX' and @name='XX']"

2.利用text()方法定位

如上所示,在【上一步】按钮的<a></a>标签之间有一段文本“上一步”,那么可以通过下面这种方式来定位

xpath = "//a[text()='上一步']"

【开始办理】按钮可以使用如下路径:

xpath = "//a[text()='开始办理']"

3.利用contains()方法定位,也叫模糊定位

xpath = "//标签名[contains(@属性, '属性值')]"

取href的关键信息'basicinfo',这样也可以定位到【开始办理】按钮
xpath = "//a[contains(@href, 'basicinfo')]" 
4.如果一个元素无法通过自身属性直接定位到,则可以先定位它的父(或父的父,它爷爷)元素,然后再找下一级即可例如定位百度搜索框,可以按照此种方式试验一下(主要是看一下这个思路)
百度搜索框对应<input>标签,定位<input>标签的话,可以先定位<form>标签,再定位<form>标签的子元素<span>标签,最后找到<input>标签
driver.find_element_by_xpath("//form[@id='form']/span[contains(@class,'s_ipt_wr')]/input").send_keys('python')

注意:在第二步定位<span>元素时,没有用<span>的id属性,因为在实际中发现通过webdriver打开的浏览器网页中<span>标签没有id属性了(所以选用<span>标签的class属性,并且通过contains()模糊定位),如下:

定位百度一下按钮

driver.find_element_by_xpath("//form[@id='form']/span[@class='bg s_btn_wr']/input").click()
或者 "//form[@id='form']//input[@id='su']"

总之,XPATH路径表达式需要多写多练,孰能生巧。还有当定位失败时不要慌,找下原因,眼见不一定为实,像上面定位百度搜索框时,通过id属性没有定位到<span>标签,查看通过webdriver打开的网页元素时,发现<span>标签的id属性没了,只有class属性了,这个时候就需要换一个属性,如class属性(至于为啥会消失,我也不知道,希望有高手不吝赐教)。

参考文章:

https://www.cnblogs.com/hanmk/p/8997786.html

Selenium之XPATH定位(第二篇)相关推荐

  1. 用XPath精确定位节点元素selenium使用Xpath定位之完整篇

    用XPath精确定位节点元素&selenium使用Xpath定位之完整篇 用XPath精确定位节点元素&selenium使用Xpath定位之完整篇 在利用XSL进行转换的过程中,匹配的 ...

  2. web自动化测试之Selenium基础 — XPath定位大全

    1.什么是 XPath? XPath (XML Path Language) 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航. XPath 包含一个标 ...

  3. XPath入门 Selenium使用Xpath定位

    XPath入门 Selenium使用Xpath定位 什么是Xpath 什么是XML XML 与 HTML 的主要差异 如何来获取想要的Xpath路径 谷歌浏览器为例 掌握基本语法,以下列的HTML为例 ...

  4. UWB定位: 第二篇 . 原理

    UWB定位系列专题: UWB定位: 第一篇 . 简介 UWB定位: 第二篇 . 原理 UWB定位: 第三篇 . 市场分析 UWB定位: 第四篇 . Apple Iphone11 U1芯片 & ...

  5. 基于selenium和xpath定位方法爬取某个话题下的微博内容!是真的强!

    为什么这期要叫暴力爬虫呢?因为笔者认为基于selenium方法非常的简单粗暴!!理由有两点: 1.在selenium方法下,我们可以通过调用浏览器驱动来实现模拟鼠标点击.滑轮下滑以及输入文本等操作,就 ...

  6. 爬虫系列(2):暴力爬虫——基于selenium和xpath定位方法爬取某个话题下的微博内容

    为什么这期要叫暴力爬虫呢?因为笔者认为基于selenium方法非常的简单粗暴!!理由有两点: 1.在selenium方法下,我们可以通过调用浏览器驱动来实现模拟鼠标点击.滑轮下滑以及输入文本等操作,就 ...

  7. 二:unittest框架配合selenium之xpath定位

    刚开始学习selenium自动化测试时,犯了一个不该犯的错误,偷懒,使用火狐浏览器中的扩展FIREBUG,FIREPATH来辅助定位. 虽然用的定位方法大多数是使用XPATH方法,但是是工具定位出来的 ...

  8. java selenium (六) XPath 定位

    xpath 的定位方法, 非常强大.  使用这种方法几乎可以定位到页面上的任意元素. 阅读目录 什么是xpath xpath 是XML Path的简称, 由于HTML文档本身就是一个标准的XML页面, ...

  9. selenium之xpath定位详解

    xpath定位 xpath概述: 1.xpath即为xml path的简称,它是一种用来确定XML文档中某部分位置的语言. 2.HTML可以看做是XML的一种实现,所以selenium用户可以使用这种 ...

最新文章

  1. 探究被Win7保留的100MB活动分区
  2. 潜在语义分析(Latent Semantic Analysis)
  3. /bin/bash^M: bad interpreter
  4. Coursera课程Python for everyone:chapter8
  5. 细谈C语言中的strcpy,strncpy,memcpy,memmove,memset函数
  6. Servlet的认识
  7. 安宁计算机学院,合肥工业大学计算机与信息学院导师介绍:安宁
  8. mysql+rownumber的用法_mysql中如何实现row_number
  9. fixed在微信下的BUG
  10. 假设以邻接矩阵作为图的存储结构_图的存储
  11. 领域应用 | 阿里发布藏经阁计划,打造 AI 落地最强知识引擎
  12. CoolFormat 源代码格式化工具使用手册
  13. 我的世界java版如何装mod_Minecraft如何安装Mod?Minecraft添加Mod的方法
  14. Github Star 4.6K,3.5M超超轻量中英文OCR模型开源,火了!
  15. Typescript 类型的常用知识与技能
  16. Visual Studio 201~ Code 格式检查
  17. 机器学习算法的Python实现 (1):logistics回归 与 线性判别分析(LDA)
  18. 选址(重心法、微分法迭代)
  19. 【Antd】Pagination中的current和pageSize参数自动同步到url当中
  20. A. One-dimensional Japanese Crossword

热门文章

  1. GitHub高赞:给文字打马赛克=形同虚设,AI看透你一切小心思,已开源
  2. 命令行编译_新鲜货:C++ Build Insights告诉你为啥你的代码编译这么慢
  3. 陕西农心邮箱服务器,由农心杯决战看AI规则对胜负判断的差异
  4. 【SpringCloud】Eureka-实例
  5. 使用phpqrcode生成二维码时候显示不正常,有一个小方块
  6. Window编译Opencv CUDA
  7. cuda 0 not supported xla
  8. Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False
  9. Can't use asio::placeholders::error
  10. python3+scapy扫描获取局域网主机ip和mac