通过XPath [Selenium]从Span元素中提取文本

时间:2017-12-20 18:50:57

标签: java css selenium xpath

我有以下HTML:

<div class="a-row a-spacing-small a-size-small">
<div class="a-row">
<a class="a-link-normal a-declarative g-visible-js reviewStarsPopoverLink" href="#" data-action="a-popover" data-a-popover="{"closeButton":"false","url":"/gp/customer-reviews/widgets/average-customer-review/popover/ref=wl_it_o_cm_cr_acr_img_hz?ie=UTF8&a=B05555JQP&contextId=wishi&link=1&seeall=1","name":"review-hist-pop.B075555RJQP","max-width":"700","position":"triggerBottom","data":{"itemId":"I2555555554GT","isGridViewInnerPopover":""},"header":"","cache":"true"}">
<i id="review_stars_I2J55555554GT" class="a-icon a-icon-star a-star-4-5">
<span class="a-icon-alt">4.5 out of 5 stars</span>
</i>
<i class="a-icon a-icon-popover"/>
</a>
<a class="a-link-normal g-visible-no-js" href="/product-reviews/B075555JQP/ref=wl_it_o_cm_cr_acr_txt_hz?ie=UTF8&colid=2K4U5555551D&coliid=I2J5555555T&showViewpoints=1">
<span class="a-letter-space"/>
<a id="review_count_I2J55555555GT" class="a-link-normal" href="/product-reviews/B05555555P/ref=wl_it_o_cm_cr_acr_txt_hz?ie=UTF8&colid=255555555D&coliid=I2555555GT&showViewpoints=1">(68)</a>
</div>
<div class="a-row">
<div class="a-row a-size-small itemAvailability">
<div class="a-row itemUsedAndNew">
</div>

我正在尝试通过以下XPath之一提取值4.5 out of 5 stars

.//*[contains(@id,'review_stars')]/span[@class='a-icon-alt']
.//*[contains(@id,'review_stars')]

但是,到目前为止我尝试的所有内容都失败了(返回空字符串)

有趣的是,所有这些XPath实际上都在Firebug中工作,所以我不确定为什么它在我的程序中不起作用(我怀疑它与评级不同的事实有关)实际上在浏览器中可见,除非你将鼠标悬停在特定元素上,但我不确定是否/为什么/如何导致上述问题以及如何解决它?

谢谢!

3 个答案:

答案 0 :(得分:0)

您未能在锚点和范围之间包含图像。跨度在图像内部,而不是锚点的兄弟。

尝试:

SELECT *
FROM (select 0 a, 1 b) t
where (CASE
WHEN a THEN "First"
WHEN b THEN "Second"
ELSE "Other" END) = "second";

答案 1 :(得分:0)

要通过4.5 out of 5 stars提取值XPath,您可以使用:

//a[@class='a-link-normal a-declarative g-visible-js reviewStarsPopoverLink']/i[starts-with(@id,'review_stars_') and @class='a-icon a-icon-star a-star-4-5']/span[@class='a-icon-alt']

更新:

正如您提到的 This does not work either. I just tried it. ,您必须错过我提供的 xpath 中的一部分内容。我的答案是经证实的。请参阅下面的快照:

XPath_snapshot

  

注意:虽然您的问题与 xpath 有关,但您已经根据 getText()方法提出了答案和 getAttribute(“innerHTML”)方法。我的答案如何使用 getText() getAttribute(“innerHTML”)方法。

答案 2 :(得分:0)

我会尝试回答我自己的问题,虽然我不完全理解为什么我以前的代码不起作用。如果有人能够给我一个深入的解释,我会接受他们的答案作为最终答案。

目前这对我有用:

而不是致电element.getText();来电element.getAttribute("innerHTML");

这会返回正确的结果,但我想了解为什么getText()在这种情况下不起作用。同样,如果某人可以提供可行或可以解释所有这些的XPath,我将接受它作为最终答案。

由于