【问题标题】:Selenium: Unable to Scrape Text Via XPathSelenium:无法通过 XPath 抓取文本
【发布时间】:2016-07-28 20:13:12
【问题描述】:

我正在尝试抓取文本:

10 小时 51 分钟

来自以下 HTML sn-p:

<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 时,我没有得到任何回报。换句话说,我无法删除前面提到的值。

有什么想法吗?

【问题讨论】:

    标签: xml selenium xpath selenium-webdriver web-scraping


    【解决方案1】:

    这个 XPath

    //span[@data-field='fasttrackcountdown']
    

    将选择该元素

    <span data-field="fasttrackcountdown">10 hours and 51 minutes</span>
    

    根据要求在您的 HTML 中。

    【讨论】:

    • 您好,谢谢,但我刚刚测试过它并不起作用。要自己测试它,请将任何产品添加到亚马逊上的购物车,导航到结帐,然后在下订单之前,您将看到带有倒计时的此屏幕。前任。产品:amazon.com/AmazonBasics-Apple-Certified-Lightning-Cable/dp/… 注意:您需要 Amazon Prime 才能看到此屏幕。再一次,在 Firebug 中,我可以使用提供的任一 XPath 来识别元素,但 Selenium 由于某种原因无法获得实际值。注意:看到的值每分钟都在变化,但我不知道这会如何/是否会影响任何事情。
    • XPath 是正确的(但可能在您应用它时您的数据没有加载,或者可能在完整数据中出现其他情况)。抱歉,但我没有针对亚马逊的服务器进行测试,这几乎肯定违反了他们的服务条款。您应该通过适当的渠道并使用他们的 API。祝你好运。
    【解决方案2】:

    正如你所说你的 xPath 是正确的,那么它可能是时间,在你要查找元素的时候,可能它不会与文本一起出现,你应该尝试使用 WebDriverWait 等到元素可见cssSelectorspan[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");
    

    希望对您有所帮助...:)

    【讨论】:

      猜你喜欢
      • 2021-07-22
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 2022-06-11
      • 2018-11-05
      • 2016-06-19
      • 2021-10-24
      • 2020-06-20
      相关资源
      最近更新 更多