Lua скрипт не смог нажать на кнопку - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь очистить полеты от ссылки с помощью scrapy-splash, используя этот скрипт lua:

function main(splash)
                local waiting_time = 2 

                -- Go to the URL
                assert(splash:go(splash.args.url))
                splash:wait(waiting_time)

                -- Click on "Outgoing tab"
                local outgoing_tab = splash:select('#linkRealTimeOutgoing')
                outgoing_tab:mouse_click()
                splash:wait(waiting_time)

                -- Click on "More Flights" button
                local more_flights_btn = splash:select('#ctl00_rptOutgoingFlights_ctl26_divPaging > div.advanced.noTop > a')
                more_flights_btn:mouse_click()
                splash:wait(waiting_time)

                return splash:html()
end

и по какой-то причине я получаю эту ошибку:

'LUA_ERROR', 'message': 'Lua error: [string "..."]:16: attempt to index local \'more_flights_btn\' (a nil value)', 'error': "attempt to index local 'more_flights_btn' (a nil value)"}, 'type': 'ScriptError', 'description': 'Error happened while executing Lua script'}

Кто-нибудь знает, почему это происходит?Также кто-нибудь знает, где я могу получить общую версию для интеграции сценариев lua с splash?кроме официального сайта?

Заранее спасибо!

1 Ответ

0 голосов
/ 21 февраля 2019

Это просто похоже на проблему времени.Я запускал ваш скрипт Lua пару раз, и я получил эту ошибку только один раз.

Достаточно просто подождать, прежде чем получить кнопку.Однако, если время, которое требуется, сильно варьируется, и вы не всегда хотите ждать полный рабочий день, тогда вы можете попробовать немного более умный цикл, подобный этому:

-- Click on "More Flights" button
local more_flights_btn
-- Wait up to 10 seconds:
for i=1,10 do
    splash:wait(1)
    more_flights_btn = splash:select('#ctl00_rptOutgoingFlights_ctl26_divPaging > div.advanced.noTop > a')
    if more_flights_btn then break end
    -- If it was not found we'll wait again.
end
...