Я думаю, что в приведенном ниже сценарии Spla sh дважды извлекает один и тот же URL-адрес с удаленного сервера.
В первом случае он отправляет html визуализированный, поскольку конечная точка - это 'render. html 'и для другого запроса мы выполняем сценарий lua, чтобы щелкнуть кнопку, а затем отправить запрос из конечной точки' выполнить '.
url = response.url + '#OddsComparison'
meta_data['type'] = 'odds'
meta_data['original_url'] = url
meta_data['splash'] = {}
meta_data['splash']['args'] = {}
meta_data['splash']['args']['url'] = url
meta_data['bet_type'] = 'Win'
meta_data['splash']['endpoint'] = 'render.html'
meta_data['splash']['splash_url'] = getSplashURL()
meta_data['splash']['wait'] = '10'
yield Request(url, self.parse_odds, meta=meta_data, headers=headers)
lua_script = """
function main(splash, args)
assert(splash:go(args.url))
assert(splash:wait(10))
js = 'document.getElementsByClassName("bettype__button")[1].click()'
splash:runjs(js)
function is_complete(splash, condition)
while not condition() do
splash:wait(0.05)
end
end
is_complete(splash, function()
return splash:evaljs("document.getElementsByClassName('bettype__button')[1].className.includes('eventActive')")
end)
return {
html = splash:html()
}
end"""
meta_data['bet_type'] = 'Place'
meta_data['splash']['args']['lua_source'] = lua_script
meta_data['splash']['endpoint'] = 'execute'
meta_data['splash']['splash_url'] = getSplashURL()
meta_data['splash']['wait'] = '10'
yield Request(url, self.parse_odds, meta=meta_data, headers=headers)
Один и тот же URL-адрес не извлекается дважды? Могу ли я как-нибудь оптимизировать это? Могу ли я сделать запрос на удаленный сервер только один раз и отправить один запрос и, используя ту же самую загруженную страницу, запустить несколько javascript и снова передать запрос? Возможно ли это?