在Selenium Webdriver中使用XPath Contains、Sibling函数定位


前言

在一般情况下,我们通过简单的xpath即可定位到目标元素,但对于一些既没id又没name,而且其他属性都是动态的情况就很难通过简单的方式进行定位了。

在这种情况下,我们需要使用xpath1.0内置的函数来进行定位,下面我们重点讨论一下3个函数:

  • Contains

  • Sibling

Contains函数

通过contains函数,我们可以提取匹配特定文本的所有元素。

例如在百度首页,我们使用contains定位包含“新闻”文本的元素。

"//div/a[contains(text(), 新闻)]"

在python selenium中使用xpath contains定位,代码片段如下:

driver.find_element_by_xpath("//div/a[contains(text(), 新闻)]")

sibling函数

通过sibling函数我们可以提取指定元素的所有同级元素,即获取目标元素的所有兄弟节点。

例如通过刚才“新闻”节点来定位“hao123”节点。

"//div/following-sibling::a[contains(text(), 新闻)]"

python selenium代码片段为如下

driver.find_element_by_xpath(
u"//div/a[contains(text(), '%s')]/following-sibling::*" % u"新闻")

通过刚才“新闻”节点来定位其所有的兄弟节点。

python selenium代码片段如下(注意这里用的是find_elements_by_xpath):

driver.find_elements_by_xpath(
u"//div/a[contains(text(), '%s')]/following-sibling::*" % u"新闻")

下面我们看一个完整的代码示例:

#_*_ coding:utf-8 _*_
__author__ = '苦叶子'
from
selenium import webdriver
import
sys
reload(sys) sys.setdefaultencoding("utf-8")

if
__name__ == '__main__':    driver = webdriver.Ie()        driver.get(u"http://www.baidu.com")            # 定位 通过contains 定位包含“新闻”的元素    new_node = driver.find_element_by_xpath(
   u"//div/a[contains(text(), '%s')]" % u"新闻")    
   print new_node.text        
   # 定位 “新闻”元素的兄弟节点“hao123”    hao123_node = driver.find_element_by_xpath(    
       u"//div/a[contains(text(), '%s')]/following-sibling::*"

       % u"新闻")    
   print
hao123_node.text        
   # 定位 “新闻”元素的所有兄弟节点
   all_node = driver.find_elements_by_xpath(    
       u"//div/a[contains(text(), '%s')]/following-sibling::*"

       % u"新闻")    
   for ee in all_node:        
       print
ee.text    driver.quit()
ps:正常情况下,xpath定位会选择第一个元素位置的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值