xpath 学习笔记

1. xpath是什么

XPATH是一门在XML文档中查找信息的语言,XPATH可用来在XML文档中对元素和属性进行遍历,主流的浏览器都支持XPATH,因为HTML页面在DOM中表示为XHTML文档。XPATH语言是基于XML文档的树结构,并提供了浏览树的能力,通过多样的标准来选择节点。

Selenium WebDriver支持使用XPATH表达式来定位元素。

XPATH和CSS选择器最重要的区别是XPATH可以向前和向后查询DOM结构的元素,而CSS选择器只能向前查询,这意味着XPATH可以通过子元素来定位父元素!

2. xpath的几种定位方法

1). 绝对路径(当页面元素位置发生改变时,都需要修改,因此,并不推荐使用)

       例:xpath = /html/body/div[x]/form/input

2). 相对路径

   例如,百度首页新闻的xpath =  //*[@id="u1"]/a[1]  : id 值为u1的div下面第一个a标签

3). contains函数定位,也叫模糊定位

有时候xpath表达式太长或者节点信息里面,有些信息是动态的,每次都获取都不一样,这个时候contains()方法就很好用

例如美团首页搜索商家输入框,如果用chrome开发者工具的copy xpath拷贝下来的xpath为://*[@id="main"]/header/div[2]/div[2]/div[1]/input定位也是没有问题,但是太长了,现在我们来修改一下为://*/input[contains(@class,'header-search-input')] 看起来就相对简单了很多

再如美团首页的“美食”,同样xpath虽然定位也没有问题但是相当长:

//*[@id="app"]/div/div/div[1]/div[1]/div/div[2]/ul/li[1]/span/span/a

但是如果我们用contains函数的话就会变得很简单://*/span/a[contains(@href,'meishi')]

注:如果xpath直接写成//*/a[contains(@href,'meishi')]执行的时候会报错

“ElementNotVisibleException: Message: element not visible”

在这种情况下需要加上父节点/span

4). 通过xpath轴来定位

当某个元素的各个属性及其组合都不足以定位时,我们可以利用其兄弟节点或者父节点等各种可以定位的元素进行定位

美团登录页面有手机动态码登录和账号登录,由两个form通过sytle=display:block 和style=display:none来显示和隐藏,在每个form下面都有一个7天内自动登录,如果直接取7天内自动登录label都xpath是://*[@id="J-normal-form"]/div[5]/label 是可以定位成功的,但是我们也可以尝试用轴来定位,例如:

a.通过找form的孩子里面第5个div中的label来进行定位

//*[@id="J-normal-form"]/child::div[5]/label[@for="autologin"]

b.通过following-sibling (选取当前节点之后的所有兄弟节点)来进行定位

选取/a标签之后的兄弟节点label来定位

//*/a[contains(@href,'retrievepassword')]/following-sibling::label[@for="autologin"]

注:有时候我们会觉得需要取的元素为label前的这个type=checkbox的元素,进行操作才能选中checkbox,但是在某些情况下这个type=checkbox元素是隐藏的元素,不管用什么方法取xpath进行操作都会报错提示“ElementNotVisibleException: Message: element not visible”,此时我们可以思考一下,尝试去操作input后面的label,因为其实他们是一体的。

5). 通过元素属性来进行定位

定位美团登录页面账号输入框,我们可以通过元素属性来进行定位,当id能唯一标志这个元素的时候可以用以下xpath

//*[@id="login-email"]

但是如果id不能唯一区别这个输入框元素的时候可以加入其他属性,如下:

//*[@id="login-email" and @name="email"]

6).通过文本值进行定位

当标签属性很少,不足以唯一区别元素时,但是标签中间存在唯一的文本值,也可以定位

例如美团首页的"手机APP"可以通过如下xpath进行定位

//*/a[contains(text(),'手机APP')]

7). 通过starts-with, ends-with 方法来进行定位

a.starts-with例子: input[starts-with(@id,'ctrl')]              解析:匹配以ctrl开始的属性值

b.ends-with例子:input[ends-with(@id,'_userName')]     解析:匹配以userName结尾的属性值

8). 找上级

找爸爸:xpath = //span[@class=’bg s_ipt_w’]/input

如果爸爸没有唯一的属性,可以找爷爷:xpath = //form[@id=’form1’]/span/input

这样一级一级找上去,直到html ,那么就是一个绝对路径了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,599评论 18 139
  • 使用selenium进行自动化时少不了对元素进行定位,但目前前端大多使用框架vue,angular等,很多元素并没...
    菠了个萝阅读 9,392评论 1 5
  • 以前只会用Beautiful Soup, 后来听说xpath速度更快而且更好用, 那还用说吗?赶紧弃暗投明了. 导...
    mundane阅读 228评论 0 0
  • 我翻开有你照片的相册,而你在我的心田。我来到有你走过的麦田,而你已心往海边!
    山中客服阅读 101评论 0 0
  • 1.参数解释: weight=设置服务器的权重值max_fails=检测失败的次数fail_timeout=检测的...
    古寒飞阅读 205评论 0 0