所以我想要访问几个网页,每个页面都有我想要计算的项目列表,然后单击下一页按钮直到最后一页并返回List[Double]
(我需要在每个页面内)解析一些值,这就是Double
变量的原因。
所以我有这个isNextPageExist
函数返回下一页URL
以防它存在,None
否则:
def isNextPageExist(): Option[String] = {
}
此函数计算页面总量:
def calculatePageValue(): Double = {
}
递归函数:
def getTotalValue(option: Option[String]): List[Double] = {
option match {
case Some(x) => {
driver.get(isNextPageExist.get)
calculatePageValue() :: getTotalValue(isNextPageExist)
}
case None => Nil
}
}
所以这个工作正常,除了这个函数不计算第一页的事实。 当我调用此函数时,我在第一页内,所以我需要计算这个页面,然后进入下一页。
BTW我有另外两个函数返回Boolean
:isFirstPage
和isLastPage
,但我不知道是否需要使用它们。
答案 0 :(得分:0)
因此,从它的声音来看,你已经确定了这个问题。 您已经在第一页,但代码调用的第一件事就是下一页。
相反,您应首先调用calculatePageValue。 所以在你的Some(x)情况下,像
val currentValue = calculatePageValue()
driver.get(isNextPageExist.get)
currentValue :: getTotalValue(isNextPageExist)
编辑:
重新审视代码我很困惑为什么它不会抛出异常。 isNextPageExist应该在最后一页上返回None。这应该在调用driver.get(isNextPageExist.get)时抛出异常,这可能就是为什么没有计算最后一页(并且异常隐藏)。
也许尝试稍微重构一下代码:
def getTotalValue(url: String): List[Double] = {
driver.get(url)
val currentValue = calculatePageValue()
val nextValues: List[Double] = isNextPageExist.map{nextUrl =>
getTotalValue(nextUrl)
}.getOrElse(Nil)
currentValues :: nextValues
}