无法使用selenium webdriver在雅虎财务中找到股票价格

时间:2014-03-13 00:53:44

标签: java selenium-webdriver jexcelapi

过去两天,我一直在努力寻找从雅虎财经中提取股票数据的方法。我之前使用过selenium webdriver,我发现它非常有用,但是我似乎无法找到它来定位股票的价格。在finance.yahoo.com中,html相当复杂,但我认为你可以隔离标签,所以我的代码看起来像这样:

public void writeSheet() throws WriteException, Exception{
    int r = 0;
    for(String s : listOfFunds){
        Label stockLabel = new Label(0,r,s);
        Number stockPrice = new Number(1,r,0.00);
        driver.get("http://finance.yahoo.com/q?s=" + s + "%2C+&q1=q");
        Thread.sleep(200);
        WebElement price = driver.findElement(By.tagName("span"));
        stockPrice.setValue(Double.parseDouble(price.findElement(By.id("yfs_184_" + s.toLowerCase())).getText()));
        id=\"yfs_184_" + s.toLowerCase() + "\""));
        sourceSheet.addCell(stockLabel);
        sourceSheet.addCell(stockPrice);
        r++;
    }
    sourceBook.write();
    sourceBook.close();
}

我真的只是在检查,看到我没有错过任何愚蠢的事情,或者我是否正在搜索标签名称。我正在寻找的一个HTML行看起来像这样:

<span id="yfs_184_" + insert symbol to lowercase here + ">stock price</span>

1 个答案:

答案 0 :(得分:0)

我试过这个并且效果很好。

WebElement stockpriceText = driver.findElement(By.cssSelector("span[id=\"yfs_l84_ctsh\"]"));
String price = stockpriceText.getText();

输出 51.59

我相信你的定位策略有点不对劲。您正试图首先找到一个范围:

WebElement price = driver.findElement(By.tagName("span"));

这可能是问题所在。 WebDriver将在页面上找到第一个<span>元素。它可能是DOM中的其他跨度。
当你执行这个时:

price.findElement(By.id("yfs_184_" + s.toLowerCase())).getText();

那次你试图在span元素中找到另一个不起作用的元素。