Как мне прокрутить несколько раз до конца веб-страницы с Lua?
Основываясь на ответе на этот вопрос и приведенном здесь коде, я сделал следующую функцию для прокрутки веб-страницы, пока она не останется прежней:
function main(splash)
local scroll_delay = 0.2
local previous_height = -1
local number_of_scrolls = 0
local maximal_number_of_scrolls = 50
local scroll_to = splash:jsfunc("window.scrollTo")
local get_body_height = splash:jsfunc(
"function() {return document.body.scrollHeight;}"
)
local get_inner_height = splash:jsfunc(
"function() {return window.innerHeight;}"
)
local get_body_scroll_top = splash:jsfunc(
"function() {return document.body.scrollTop;}"
)
assert(splash:go(splash.args.url))
splash:wait(splash.args.wait)
while true do
local body_height = get_body_height()
local current = get_inner_height() - get_body_scroll_top()
if body_height - current <= 0 then
break
end
scroll_to(0, body_height)
number_of_scrolls = number_of_scrolls + 1
if number_of_scrolls == maximal_number_of_scrolls then
break
end
splash:wait(scroll_delay)
end
return splash:html()
end
Этот скрипт выполняется с помощью Splash and Scrapy. Однако проблема в том, что кажется, что он всегда ломается, когда достигается максимальное количество свитков. Похоже, что состояние в
if body_height - current <= 0 then
break
end
никогда не выполняется. Из-за этого мне пришлось ограничить количество попыток прокрутки, чтобы функция не попала в бесконечный цикл. Что я могу сделать, чтобы убедиться, что цикл закончится, если достигнут конец страницы и прокрутка больше невозможна?