所以这是我尝试使用的当前XPath。
//*[@id="highcharts-33"]/svg/g[3]/g[1]/text
问题是这是一个动态X路径,所以它就像" highcharts-33"," highcharts-34"等等...我点击一个复选框,制作这些图表的截图。每次选中/取消选中复选框时,下一个图形将具有不同的ID。
以下是我进入cmd的错误:
NoSuchElementException:消息:无法找到元素:{"方法":" xpath","选择器":" // * [包含( @id,' highcharts - &#39)] / SVG / g的[3] / G [1] /文本"}
你可以在这里看到我试图使用"包含"。我也尝试使用"开始 - 用"但我仍然无法找到图表。
以下是我尝试过的事情:
textvote = self.driver.find_element_by_xpath("//*[contains(@id,'highcharts-')]/svg/g[3]/g[1]/text").text
textvote = self.driver.find_element_by_xpath("//*[starts-with(@id,'highcharts-')]/svg/g[3]/g[1]/text").text
我搜索了堆栈溢出,并在其上看到了一些主题,它始终是开始 - 包含/包含或未回答的主题。所以我可能正在使用start-with /包含错误。
如果您希望我分享更多代码,请不要犹豫。 谢谢。
编辑:添加相关的HTML
<div id="chartListContainer">
<div id="chart0" class="gauge-chart" data-highcharts-chart="16"><div class="highcharts-container" id="highcharts-33"
<div class="highcharts-container" id="highcharts-33"
<svg version="1.1"
<g class="highcharts-data-labels highcharts-tracker"
<g zIndex="1"
<text x="0" zIndex="1" style="font-size:30px;font-family:Open Sans;color:#1abb1a;fill:#1abb1a;" y="32"><tspan>80.0% (4 votes)</tspan></text>
我试图从最后一行中提取文字。
答案 0 :(得分:1)
我假设您的<text>
元素中只有一个<div id="highcharts-*>
元素,因此您可以尝试使用CSS选择器div[id^="highcharts"] text
textvote = self.driver.find_element_by_css("div[id^='highcharts-'] text").text
此CSS选择<text>
元素内的所有<div>
元素,其中id以“highcharts-”开头,但如果您有多个<text>
元素,则可能会遇到麻烦。< / p>
编辑:
再看一下我认为假设那里只有一个<text>
元素是错误的,一个固定的CSS选择器来模仿你的xpath:
textvote = self.driver.find_element_by_css("div[id^='highcharts-']>svg>g:nth-of-type(3)>g:nth-of-type(1)>text").text