《SeleniumBasic 3.141.0.0 - 在VBA中操作浏览器》系列文章之十五:XPath定位父子兄弟元素

SeleniumBasic的FindElement共有8个系列方法。其中XPath和CssSelector技巧性最强,其余6种定位方法很直观简单。

这节学习使用XPath定位一个元素周围的其他元素。

百度首页左上角有7个超链接,这些超链接的父亲是id为s-top-left的div,爷爷是id为head的div。

 

首先简单地说一下XPath的语法

//div[@id='s-top-left']/a[3]

//表示根节点,也就是WD对象。div表示根节点下的第一个div,方括号里@用于限定属性条件,/表示下一级的路径分隔符,a[3]表示第3个超链接。

注意:XPath的中括号里的索引起始于1,不是0。

上面可以概括为:查找id为s-top-left的div下面的第3个超链接。请看代码:

Dim div As IWebElement
Dim map As IWebElement
Set div = WD.FindElementByXPath("//div[@id='s-top-left']")
Set map = div.FindElementByXPath("a[3]")
Set map = WD.FindElementByXPath("//div[@id='s-top-left']/a[3]")
Debug.Print map.text '地图
Debug.Print map.FindElementByXPath("preceding-sibling::a[1]").text 'hao123
Debug.Print map.FindElementByXPath("preceding-sibling::a[2]").text '新闻
Debug.Print map.FindElementByXPath("following-sibling::a[1]").text '新闻
Debug.Print map.FindElementByXPath("following-sibling::a[2]").text '新闻
Debug.Print map.FindElementByXPath("../..").GetAttribute("id") 'head

上述程序中,首先定位到“地图"赋给变量map,然后以map为中心,找到它的两个哥哥和两个弟弟(注意括号内数字的顺序,数字越大表示离自己越远)。

定位父级元素使用两个小数点,例如../..表示定位当前元素的爷爷。所以最后一句代码的结果是head。

 

posted @ 2020-10-02 22:10  ryueifu  阅读(2530)  评论(0编辑  收藏  举报