繁体   English   中英

递归 Python function 不返回适当的值

[英]Recursive Python function not returning appropriate value

我写了一个 function 来滚动一个使用无限滚动的页面,使用 selenium 我执行一个脚本滚动到底部,休眠几秒钟(让页面有时间加载更多内容),并检查当前滚动是否position 等于最后一个卷轴 position(表示这是页面的真正结尾)。 在下面的段中, end_of_scroll_region永远不会变为真,而 while 循环会无限期地运行。

last_position = None
end_of_scroll_region = False
while not end_of_scroll_region:
     last_position, end_of_scroll_region = scroll_down_page(driver, last_position)

scroll_down_page function 实际上执行滚动脚本并包含一个递归逻辑来重试滚动过程,以解决页面需要更多时间加载的情况,方法是使用尝试计数器和增加的睡眠时间再次滚动。 但经过无数次调试后,我发现end_of_scroll_region变为 True 但立即变回 False(假设回调中发生了某些事情)。

def scroll_down_page(driver, last_position, num_seconds_to_load=0.5, scroll_attempt=0, max_attempts=5):
    end_of_scroll_region = False
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    sleep(num_seconds_to_load)
    curr_position = driver.execute_script("return window.pageYOffset;")
    if curr_position == last_position:
        if scroll_attempt == max_attempts:
            end_of_scroll_region = True
        else:
            scroll_down_page(driver, last_position, num_seconds_to_load+5, scroll_attempt + 1, max_attempts)
    last_position = curr_position
    return last_position, end_of_scroll_region

正如评论中提到的,我没有从对scroll_down_page的递归调用中捕获返回值

def scroll_down_page(driver, last_position, num_seconds_to_load=0.5, scroll_attempt=0, max_attempts=5):
    end_of_scroll_region = False
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    sleep(num_seconds_to_load)
    curr_position = driver.execute_script("return window.pageYOffset;")
    if curr_position == last_position:
        if scroll_attempt == max_attempts:
            end_of_scroll_region = True
        else:
            #Solution
            last_position, end_of_scroll_region = scroll_down_page(driver, last_position, num_seconds_to_load+5, scroll_attempt + 1, max_attempts)
    last_position = curr_position
    return last_position, end_of_scroll_region

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM