一、描述

最近在某个网站上遇到一个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”无法匹配。

二、解决

  1. 修改XPath表达式,先匹配svg标签的上一层:“//div[@class="db-con-link"]//div[@class="mask"]”;
  2. svg标签包括里面的标签全部用通配符*匹配:“//div[@class="db-con-link"]//div[@class="mask"]/*/*”;
  3. 因为svg标签里面有两个子节点path,因此加上序号即可匹配指定的path标签:“//div[@class="db-con-link"]//div[@class="mask"]/*/*[1]”;
  4. 最终匹配svg标签里面的元素XPath表达式为:“//div[@class="db-con-link"]//div[@class="mask"]/*/*[1]”。
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐