Skip to content

Commit 205b829

Browse files
committed
Added: Userspace example of waiting for a specific condition.
1 parent a99be97 commit 205b829

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

docs/scripting-ref.rst

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,48 @@ time after each page load in case of redirects:
419419
return nil, "too_many_redirects"
420420
end
421421
422+
It's also common practice to wait for a specific condition, other than a fixed
423+
amount of time:
424+
425+
.. code-block:: lua
426+
427+
function wait_until(splash, timeout, polling_interval, check_func, ...)
428+
-- XXX: Assuming the check function is fast enouch, as the time is not being counted.
429+
local total_waited = 0
430+
while total_waited < timeout do
431+
local ok, reason = splash:wait(polling_interval)
432+
if not ok then
433+
return ok, string.format('wait failed: %s', reason)
434+
end
435+
local check_result = check_func(...)
436+
if check_result then
437+
return true, check_result
438+
end
439+
total_waited = total_waited + polling_interval
440+
end
441+
return nil, 'timeout exceeded'
442+
end
443+
444+
function main(splash)
445+
-- Goto example.com and wait for a specific node to be loaded in the DOM
446+
splash:go('http://example.com')
447+
wait_until(splash, 10, 0.1, splash.select, splash, 'div#example_selector')
448+
449+
-- Goto example.com and wait for a specific response to be downloaded
450+
local example_response_downloaded = false
451+
splash:on_response(function (response)
452+
if string.find(response.url, 'specific_url_pattern_here') then
453+
example_response_downloaded = true
454+
end
455+
end)
456+
splash:go('http://example.com')
457+
wait_until(
458+
splash, 10, 0.1,
459+
function ()
460+
return example_response_downloaded
461+
end
462+
)
463+
end
422464
423465
.. _splash-jsfunc:
424466

0 commit comments

Comments
 (0)