我有以下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
中工作,所以我不确定为什么它在我的程序中不起作用(我怀疑它与评级在浏览器中实际上不可见的事实有关,除非你将鼠标悬停在特定元素上,但我不确定是否/为什么/如何导致上述问题以及如何修复它
谢谢!
您未能在锚点和范围之间包含图像。跨度在图像内部,而不是锚点的兄弟。
尝试:
.//*[contains(@id,'review_stars')]/i/span[@class='a-icon-alt']
我将尝试回答我自己的问题,虽然我不完全理解为什么我以前的代码不起作用。如果有人能够给我一个深入的解释,我会接受他们的答案作为最终答案。
现在这对我有用:
而不是调用element.getText();
调用element.getAttribute("innerHTML");
这将返回正确的结果,但我想了解为什么getText()在这种情况下不起作用。同样,如果某人可以提供可行或可以解释所有这些的XPath,我会接受它作为最终答案。
谢谢
要通过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
有关,但您已经针对getText()方法和getAttribute(“innerHTML”)方法提取了答案。我的答案如何使用getText()和getAttribute(“innerHTML”)方法。