xpath的语法(转载自:http://www.cnblogs.com/jianjialin/archive/2009/02/01/1382056.html),在原文基础上稍做修改。
XPath 是XML的查询语言,和SQL的角色很类似。以下面HTML为例,介绍XPath 的语法。
<html>
<head>
</head>
<body>
<div class="div1" style="height: 40px; width: 1440px;" region="north">
<div class="div11">
<div class="div111">
<div id="div1111">
<p>this is the first p</p>
</div>
</div>
<div class="div112" style="border: none;">
<p>this is the second p</p>
</div>
</div>
</div>
<div class="div2">
<div class="div21" style="border: none;">
<div class="div211" style="border: none;">
<p>this is the third p</p>
</div>
</div>
</div>
<div class="div3">
<p>this is the fourth p</p>
<div class="div31" style="border: none;">
</div>
</div>
</body>
</html>
定位节点
XML是树状结构,类似档案系统内数据夹的结构,XPath也类似档案系统的路径命名方式。不过XPath 是一种模式(Pattern),可以选出 XML档案中,路径符合某个模式的所有节点出来。例如要选catalog底下的cd中所有price元素可以用:
html/body/div
如果XPath的开头是一个斜线(/)代表这是绝对路径。如果开头是两个斜线(//)表示文件中所有符合模式的元素都会被选出来,即使是处于树中不同的层级也会被选出来。以下的语法会选出文件中所有叫做div的元素(在树中的任何层级都会被选出来):
//div
看到这里时我还是不太清楚/和//的区别,测试如下:
/html/body/div/div/div :可以找到三个div,分别是class为div111、div112、div211的div
//div/div/div :可以找到四个div,分别是class为div111、div1111、div112、div211的div
由此可知,通过/查找时只会找到绝对匹配的元素,通过//查找时可以找到符合条件的元素及其子元素
选择未知的元素
使用星号(Wildcards,*)可以选择未知的元素。
/html/body/*:选择/html/body/下的所有子元素
/html/body/*/p:选择/html/body/下任何一个节点的p节点
//div/*/p:选择父节点类型为任意元素,父父节点为div的所有p节点
/*/*/price:选择有两层父节点,叫做price的所有元素
//*:选择文件中的所有元素
要注意的是,想要存取不分层级的元素,XPath语法必须以两个斜线开头(//),想要存取未知元素才用星号(*),星号只能代表未知名称的元素,不能代表未知层级的元素。
选择分支
使用中括号可以选择分支。
/html/body/div[1]:选择body下的子元素中第一个div元素。XPath的定义中没有第0元素这种东西。
/html/body/cd[last()]:选择body下的最后一个div元素(XPath并没有定义 first() 这种函式喔,用上例的 [1]就可以取出第一个元素)。
/html/body/div[p]:选出body下含有p子元素的所有第一次div元素。
//div[p='this is the first p']:选出div中包含p子节点且p元素的值为this is the first p的所有div元素
//div[p='this is the first p']/p:选出p的值为this is the first p的所有div下的p元素
选择一个以上的路径
使用Or操作数(|)就可以选择一个以上的路径。例如:
/html/body/div/div | /html/body/div/p :选择body下的div下的所有div及p元素
选择属性
在XPath中,除了选择元素以外,也可以选择属性。属性都是以@开头。
//p[@class]:选择所有具有class属性的p元素
//p[@*]:选择含有属性的所有cd元素
//div[@class='UK']:选择country属性值为UK的div元素
//p[@class='UK'][@name='hyddd']:选择class属性值为UK,name属性值为hyddd的p元素
一篇更详细的讲解xpath的文章:
http://www.cnblogs.com/gaojun/archive/2012/08/11/2633908.html
分享到:
相关推荐
本文将深入探讨Selenium结合XPath的定位策略,帮助你更有效地进行网页自动化测试。 首先,XPath 是一种在XML文档中查找信息的语言,其语法和功能非常丰富。在Selenium中,XPath可以用来定位页面上的元素,如按钮、...
Selenium WebDriver 中使用 By.Xpath 快速定位页面元素 Selenium WebDriver 是一个自动化测试工具,可以模拟用户交互来对 Web 应用程序进行测试。其中,定位页面元素是自动化测试的关键步骤。By.Xpath 是一种快速...
本篇文章将详细探讨RPA Selenium定位Xpath工具的使用,以及相关的Fire-IEBrowser1.4和xpath-helper。 首先,RPA(Robotic Process Automation)是一种技术,它允许用户通过模拟人类在应用界面的操作来自动化业务...
### Selenium自动化测试之XPath进阶知识点详解 #### 一、XPath概述 XPath 是一种用于在 XML 文档中查找信息的语言,它可以快速定位到 XML 文档中的任何部分。在 Web 自动化测试领域,XPath 被广泛应用于元素的定位...
利用selenium,手动登录获取cookie保存在本地用于登录平台(便于测试代码),访问商品页url通过Xpath选中对象拿数据,翻页,通过Xpath选中对象拿数据,翻页,通过Xpath选中对象拿数据....*** **网页源代码中是没有所需...
1. selenium以chromedriver驱动chrome浏览器打开目标站(真浏览器,比curl或requests访问更难被察觉) 2. beautifulsoup4解析结果dom,提取有用字段 3. peewee存结果到数据库 4. 同时以PIL增加一份结果到excel表格 ...
前一个爬虫改进版,可以爬取校园新闻标题、时间、正文内容,并根据关键字选择爬取指定正文或标题中包含关键字的新闻超链接等信息。
由于IE9及更早版本不支持原生XPath,Selenium通过引入JavaScript-XPath库来解决这一问题。在Java环境下,可以通过以下代码切换到使用JavaScript-XPath库: ```java selenium = new DefaultSelenium(location, port,...
selenium+firefox在定位时遇到selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: ...这种定位错误一般很少出现,因为其中的xpath路径一般是通过copy xpath而不是自
在Java Selenium中,XPath是一种强大的定位策略,允许测试人员几乎可以找到页面上的任何元素。 然而,XPath定位存在一些缺点。最显著的是效率问题。当Selenium WebDriver使用XPath定位元素时,它会遍历页面上的所有...
爬虫学习笔记(主要涉及scrapy,request,xpath,selenium等).md
Selenium xpath,
这篇笔记主要涵盖了如何查看Python和Selenium的版本,以及XPath元素抓取的高级用法,这对于进行Web自动化测试至关重要。 首先,了解你的Python环境的版本是必要的。在Windows系统中,你可以通过CMD(命令提示符)...
在学习selenium自动化测试技术之前,首先需要学习xpath的基础知识。
selenium.click("xpath=//button[@type='submit']"); // 等待页面加载 selenium.waitForPageToLoad("30000"); // 验证页面是否正确跳转 assertEquals("Expected Page Title", selenium.getTitle()); } ``` ...
SeleniumHelper是一款强大的自动化工具,专门设计用于简化Selenium WebDriver的操作,特别是在使用XPath查找网页元素时。Selenium是一个广泛使用的开源测试框架,它允许开发者编写脚本来模拟用户在浏览器中的行为,...
Selenium 是一个强大的开源自动化测试框架,用于网页应用。它支持多种编程语言,如 Java、Python、C#、Ruby 等,使测试工程师能够编写脚本来模拟用户在浏览器中的各种交互行为。Selenium 4.5.0 版本是该框架的一个...
在Java中使用XPath定位元素,你需要导入`org.openqa.selenium.By`包,并使用`By.xpath()`方法: ```java WebElement element = driver.findElement(By.xpath("//input[@id='username']")); ``` 在Python中,...