[英]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.