Scrapy + splash: não é possível selecionar o elemento
Estou aprendendo a usar raspar com esguicho. Como exercício, estou tentando visitarhttps://www.ubereats.com/stores/, clique na caixa de texto do endereço, insira um local e pressione o botão Enter para ir para a próxima página que contém os restaurantes disponíveis para esse local. Eu tenho o seguinte código lua:
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
Quando clico em "Render!" na API inicial, recebo a seguinte mensagem de erro:
{
"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"
}
De alguma forma, minha expressão css é falsa, resultando em splash tentando acessar um elemento indefinido / nulo! Eu tentei outras expressões, mas não consigo entender!
Q: Alguém sabe como resolver esse problema?
Edição: Embora eu ainda gostaria de saber como realmente clicar no elemento, descobri como obter o mesmo resultado usando apenas as teclas:
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
No entanto, as imagens / html retornados na API inicial são da página em que você digita o endereço, não da página que você vê depois de digitar seu endereço e clicar em inserir.
Q2: Como carrego a segunda página com êxito?