当前位置: 首页 > 知识库问答 >
问题:

如何找到图像元素的xpath

章安宜
2023-03-14

我有一个下面的HTML代码,它指向屏幕上的SVG(图像)元素

<div _ngcontent-c25="" class="chart-div ng-star-inserted">
      <!---->
      <!----><div _ngcontent-c25="" class="pie-div ng-star-inserted" d3-pie="">
				<svg width="80" height="80">
					<g transform="translate(40,40)" width="80" height="80"><g transform="translate(40,40)"></g>
						<path d="M2.4492935982947065e-15,-40A40,40 0 0,1 30.83714902626715,-25.476856947665098L13.876717061820216,-11.464585626449294A18,18 0 0,0 1.102182119232618e-15,-18Z" fill="#3182bd"></path>
						<path d="M30.83714902626715,-25.476856947665098A40,40 0 0,1 36.923912424205994,15.382610028521366L16.615760590892698,6.922174512834615A18,18 0 0,0 13.876717061820216,-11.464585626449294Z" fill="#6baed6"></path>
						<path d="M36.923912424205994,15.382610028521366A40,40 0 0,1 3.4424059772594435,39.851597723149425L1.5490826897667496,17.93321897541724A18,18 0 0,0 16.615760590892698,6.922174512834615Z" fill="#9ecae1"></path>
						<path d="M3.4424059772594435,39.851597723149425A40,40 0 1,1 -7.347880794884118e-15,-40L-3.3065463576978533e-15,-18A18,18 0 1,0 1.5490826897667496,17.93321897541724Z" fill="#c6dbef"></path>
					</g>
				</svg>
			<div class="attrFilter-tooltip" id="attributeFilterTooltipCountry" style="display: none; position: fixed; left: 1567px; top: 325px; z-index: 1000; background: rgb(238, 238, 238); box-shadow: rgb(153, 153, 153) 0px 0px 5px; color: rgb(51, 51, 51); width: 100px; text-align: center;"><div class="attrLabel" style="font-weight: bold;">Germany</div><div class="attrCount">693</div><div class="attrPercent">51.4%</div></div></div>
      <!----><p _ngcontent-c25="" class="filtered-text ng-star-inserted">
        no value filtered
      </p>
      <!---->
      <!---->
      <!---->
    </div>

我可以在div标记之前找到该元素,但是如果我尝试在SVG中访问该元素,并且它的子chrome无法找到该元素

XPath://div[@class='pie-div ng-star插入']-这在div之前工作得很好,但是如果我试图访问它的子元素SVG和路径,它根本找不到它(尽管代码在屏幕上可见)

我尝试过的Xpath://div[@class='pie-div ng-star-插入']/svg/g/path 1

元素实际上是屏幕上的svg图像(饼图),一旦我们将鼠标悬停在上面,它就会显示相应位置数据的弹出窗口

共有1个答案

傅峰
2023-03-14

您的xpath需要是//div[@class='pie-div ng star inserted']/*[name()='svg']/*[name()='g']/*[name()='path']-通过搜索xpath svg找到

还有另一种语法//div[@class='pie-div ng star inserted']/svg:svg/svg:g/svg:path——使用NSresolver参数,可以使其按如下方式工作

const xpath = "//div[@class='pie-div ng-star-inserted']/svg:svg/svg:g/svg:path";
let result = document.evaluate(
  xpath, 
  document, 
  prefix => prefix === 'svg' ? 'http://www.w3.org/2000/svg' : null,
  XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, 
  null
);

for (var i = 0; i < result.snapshotLength; i++) {
  console.log(result.snapshotItem(i).getAttribute('fill'));
}
<div _ngcontent-c25="" class="chart-div ng-star-inserted">
  <div _ngcontent-c25="" class="pie-div ng-star-inserted" d3-pie="">
    <svg width="80" height="80">
      <g transform="translate(40,40)" width="80" height="80"><g transform="translate(40,40)"></g>
        <path d="M2.4492935982947065e-15,-40A40,40 0 0,1 30.83714902626715,-25.476856947665098L13.876717061820216,-11.464585626449294A18,18 0 0,0 1.102182119232618e-15,-18Z" fill="#3182bd"></path>
        <path d="M30.83714902626715,-25.476856947665098A40,40 0 0,1 36.923912424205994,15.382610028521366L16.615760590892698,6.922174512834615A18,18 0 0,0 13.876717061820216,-11.464585626449294Z" fill="#6baed6"></path>
        <path d="M36.923912424205994,15.382610028521366A40,40 0 0,1 3.4424059772594435,39.851597723149425L1.5490826897667496,17.93321897541724A18,18 0 0,0 16.615760590892698,6.922174512834615Z" fill="#9ecae1"></path>
        <path d="M3.4424059772594435,39.851597723149425A40,40 0 1,1 -7.347880794884118e-15,-40L-3.3065463576978533e-15,-18A18,18 0 1,0 1.5490826897667496,17.93321897541724Z" fill="#c6dbef"></path>
      </g>
    </svg>
    <div class="attrFilter-tooltip" id="attributeFilterTooltipCountry" style="display: none; position: fixed; left: 1567px; top: 325px; z-index: 1000; background: rgb(238, 238, 238); box-shadow: rgb(153, 153, 153) 0px 0px 5px; color: rgb(51, 51, 51); width: 100px; text-align: center;">
      <div class="attrLabel" style="font-weight: bold;">Germany</div>
      <div class="attrCount">693</div>
      <div class="attrPercent">51.4%</div>
    </div>
  </div>
  <p _ngcontent-c25="" class="filtered-text ng-star-inserted">
    no value filtered
  </p>
</div>
 类似资料:
  • 问题内容: 我有一个复杂的html结构,其中包含许多表和div ..而且结构可能会更改。如何通过跳过两者之间的元素来查找xpath。例如 : 我必须获取有关“名字”范围的输入元素 例如: 但是..我可以跳过htmls之间的内容并直接访问输入元素吗? 问题答案: 您可以尝试以下Xpath: 说明: 选择元素: 然后在上方元素旁边获取元素: 然后在上面第二步中选择的元素内获取元素:

  • 我通过以下方式通过文本找到了一个孩子。 问题是我需要单击父元素。页面上的元素是动态显示的,之前我只知道文本。是否可以对此进行编程? 我的html:

  • 问题内容: 我目前正在建立一个基本上相当于搜索引擎和网络漫画画廊之间的交叉点的网站,该画廊侧重于引用来源并给予作者称赞。 我正在尝试找出一种搜索图像以在其中查找字符的方法。 例如: 假设我将红色字符和绿色字符另存为“ Red Man”和“ Green Man”,我如何确定图像是否包含一个或另一个。 不需要100%识别,或者什么是我想创建的更多功能,我不确定从哪里开始。我已经做了很多谷歌搜索来进行图

  • 问题内容: 我们可以使用java,imagemagick或jmagick找到哪种颜色在图像中占主导地位吗? 问题答案: 在Java中迭代每个像素并确定颜色

  • 问题内容: By Company   我需要捕获上述元素的xpath。我尝试了以下替代方法,但在Chrome中似乎没有任何效果。您能否建议其他选择。 问题答案: 要查找元素: 您可以使用以下xpath之一: 使用: 使用: 但是,理想情况下,您可能希望避免使用 NO-BREAK SPACE 字符,并使用以下任一解决方案: 使用: 使用: 参考 您可以在以下位置找到相关的详细讨论: 使用XPATH搜

  • 我将Selenium与PHP WebDriver结合使用。我试图单击导航栏中的链接,该链接显示在HTML中,如下所示: 我正在尝试选择元素,然后单击它。但是,当我尝试使用xpath时,如下所示: 或 我得到以下错误: 没有这样的元素:无法定位元素:{“method”:“xpath”,“selector”:“/*[@showpage=“cards”]”}(会话信息:chrome=70.0.3538.