一、描述
最近在某个网站上遇到一个svg元素,需要执行点击操作,HTML元素如下:
<div class="db-con-link">
<img class="back-img" src="https://zsbs.zs.gov.cn/skin/szrhzq/images/left_back.png" alt="">
<div class="title">政策导航</div>
<div class="mask">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="588px" height="184px">
<path class="leftBox l-left z_zcdh" fill-rule="evenodd" fill="rgb(0, 0, 0)" d="M10.500,0.535 L313.000,0.535 L275.500,183.115 L10.500,183.115 C4.977,183.115 0.500,178.636 0.500,173.111 L0.500,10.540 C0.500,5.014 4.977,0.535 10.500,0.535 Z"></path>
<path class="rightBox l-left s_zcdh" fill-rule="evenodd" fill="rgb(255, 255, 255)" d="M578.000,183.115 L275.500,183.115 L313.000,0.535 L578.000,0.535 C583.523,0.535 588.000,5.014 588.000,10.540 L588.000,173.111 C588.000,178.636 583.523,183.115 578.000,183.115 Z"></path>
</svg>
</div>
</div>
我需要点击svg里面的path标签,但在Selenium中通过XPath表达式:“//div[@class="db-con-link"]//svg/path”无法匹配。
二、解决
- 修改XPath表达式,先匹配svg标签的上一层:“//div[@class="db-con-link"]//div[@class="mask"]”;
- svg标签包括里面的标签全部用通配符*匹配:“//div[@class="db-con-link"]//div[@class="mask"]/*/*”;
- 因为svg标签里面有两个子节点path,因此加上序号即可匹配指定的path标签:“//div[@class="db-con-link"]//div[@class="mask"]/*/*[1]”;
- 最终匹配svg标签里面的元素XPath表达式为:“//div[@class="db-con-link"]//div[@class="mask"]/*/*[1]”。