过去两天,我一直在努力寻找从雅虎财经中提取股票数据的方法。我之前使用过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>
答案 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元素中找到另一个不起作用的元素。