Scrapy + splash: невозможно выбрать элемент
Я учусь использовать терапию со всплеском. В качестве упражнения я пытаюсь посетитьhttps://www.ubereats.com/stores/щелкните текстовое поле адреса, введите местоположение, а затем нажмите кнопку «Ввод», чтобы перейти на следующую страницу, содержащую рестораны, доступные для этого местоположения. У меня есть следующий код Луа:
function main(splash)
local url = splash.args.url
assert(splash:go(url))
assert(splash:wait(5))
local element = splash:select('.base_29SQWm')
local bounds = element:bounds()
assert(element:mouseclick{x = bounds.width/2, y = bounds.height/2})
assert(element:send_text("Wall Street"))
assert(splash:send_keys("<Return>"))
assert(splash:wait(5))
return {
html = splash:html(),
}
end
Когда я нажимаю «Render!» в API всплеска я получаю следующее сообщение об ошибке:
{
"info": {
"message": "Lua error: [string \"function main(splash)\r...\"]:7: attempt to index local 'element' (a nil value)",
"type": "LUA_ERROR",
"error": "attempt to index local 'element' (a nil value)",
"source": "[string \"function main(splash)\r...\"]",
"line_number": 7
},
"error": 400,
"type": "ScriptError",
"description": "Error happened while executing Lua script"
}
Каким-то образом мое выражение CSS неверно, в результате чего всплеск пытается получить доступ к элементу, который не определен / nil! Я пробовал другие выражения, но я не могу понять это!
Q: кто-нибудь знает, как решить эту проблему?
РЕДАКТИРОВАТЬ: Хотя я все еще хотел бы знать, как на самом деле нажать на элемент, я выяснил, как получить тот же результат, просто используя ключи:
function main(splash)
local url = splash.args.url
assert(splash:go(url))
assert(splash:wait(5))
splash:send_keys("<Tab>")
splash:send_keys("<Tab>")
splash:send_text("Wall Street, New York")
splash:send_keys("<Return>")
assert(splash:wait(10))
return {
html = splash:html(),
png = splash:png(),
}
end
Однако html / images, возвращаемые в API-интерфейсе заставки, возвращаются со страницы, где вы вводите адрес, а не со страницы, которую вы видите после ввода адреса и нажатия кнопки ввода.
Q2: Как мне успешно загрузить вторую страницу?