Selenium: 无法通过XPath抓取文本

3
我正在尝试从下面的HTML片段中抓取文本:

10小时51分钟

<div class="a-box-inner">
<div class="a-row a-spacing-mini prime-ad-banner-content" data-testid="">
<div class="a-row shipment" data-testid="order-box-0" data-orderid="0">
<div class="a-row">
<div class="a-row shipping-group">
<div class="a-row" data-testid="">
<div class="a-row a-color-success a-size-medium">
<span class="a-text-bold" data-promisetype="delivery">Guaranteed delivery date:</span>
<span class="a-color-success a-text-bold">
<span class="a-size-base a-color-secondary fasttrack-span hidden a-text-normal" style="display: inline;">
<span class="fasttrackexpired hidden" style="display: none;">
<span class="fasttrackavailable fasttrackcountdown hidden a-text-normal" style="display: inline;">
If you order in the next
<span data-field="fasttrackcountdown">10 hours and 51 minutes</span>
(
<a class="a-size-mini" href="/gp/help/customer/display.html/ref=chk_ship_ft_details_pri?ie=UTF8&nodeId=3510241" target="AmazonHelp">Details</a>
)
</span>
<div id="a-popover-" class="a-popover-preload">
<div id="a-popover-" class="a-popover-preload">
<input type="hidden" value="39399" name="fasttrackExpiration">
<input type="hidden" value="0" name="countdownThreshold">
<input type="hidden" value="0" name="showSimplifiedCountdown">
<input type="hidden" value="countdownId-0" name="countdownId">
</span>
</div>
</div>
<div class="a-row a-spacing-small">
<div class="a-row">

我正在使用XPath:
.//*[@id='spc-orders']/div[1]/div/div[2]/div/div/div[1]/div/span[3]/span[2]/span

然而,尽管我可以使用Firebug和Eclipse识别此元素,但当我尝试在此元素上使用getText时,我没有得到任何返回。换句话说,我无法获取先前提到的值。
有什么想法吗?
2个回答

1
这个XPath。
//span[@data-field='fasttrackcountdown']

将选择此元素。
<span data-field="fasttrackcountdown">10 hours and 51 minutes</span>

在你的HTML中,如所请求。

你好,谢谢。但是我已经测试过了,它不起作用。要自行测试,请在亚马逊上将任何产品添加到购物车中,在结算前右侧会出现此倒计时屏幕。例如:https://www.amazon.com/AmazonBasics-Apple-Certified-Lightning-Cable/dp/B010S9N6OO 注意:您需要Amazon Prime才能看到此屏幕。再次说明,在Firebug中,我可以使用提供的XPath之一识别元素,但Selenium无法出于某种原因获取实际值。注意:所看到的数值每分钟都在变化,但我不知道这是否会影响任何内容。 - ee clipse
1
XPath 是正确的(但也许在应用它的时候你的数据还没有加载,或者完整数据中存在其他情况)。很抱歉,我没有对亚马逊的服务器进行测试,这几乎肯定是违反他们服务条款的行为。你应该通过正当渠道并使用他们的 API。祝你好运。 - kjhughes

0

如果你说你的xPath是正确的,那可能是因为时间问题,在你查找元素的时候,它可能没有文本,你应该尝试使用WebDriverWait来等待直到元素可见,使用cssSelector作为span[data-field='fasttrackcountdown'],如下所示(假设你正在使用Java):

WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement el = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("span[data-field='fasttrackcountdown']")));
el.getText();

如果您仍然无法找到文本,您应该使用以下代码:getAttribute("innerHTML")
el.getAttribute("innerHTML");

或者尝试使用以下代码:getAttribute("textContent")

el.getAttribute("textContent");

希望能有所帮助... :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接