使用递归循环遍历网页 - 功能无法处理第一页

时间:2016-08-01 04:19:15

标签: scala selenium recursion

所以我想要访问几个网页,每个页面都有我想要计算的项目列表,然后单击下一页按钮直到最后一页并返回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我有另外两个函数返回BooleanisFirstPageisLastPage,但我不知道是否需要使用它们。

1 个答案:

答案 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
}