Scrapy + splash: no se puede seleccionar el elemento
Estoy aprendiendo a usar scrapy con splash. Como ejercicio, estoy tratando de visitarhttps://www.ubereats.com/stores/, haga clic en el cuadro de texto de dirección, ingrese una ubicación y luego presione el botón Entrar para pasar a la página siguiente que contiene los restaurantes disponibles para esa ubicación. Tengo el siguiente 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
Cuando hago clic en "¡Renderizar!" en la API de bienvenida, recibo el siguiente mensaje de error:
{
"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 alguna manera, mi expresión css es falsa, lo que da como resultado que splash intente acceder a un elemento que no está definido / nil. He intentado otras expresiones, ¡pero parece que no puedo entenderlo!
Q: ¿Alguien sabe cómo solucionar este problema?
EDITAR: Aunque todavía me gustaría saber cómo hacer clic en el elemento, descubrí cómo obtener el mismo resultado simplemente usando las 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
Sin embargo, las imágenes / html devueltas en la API de bienvenida provienen de la página donde ingresa la dirección, no de la página que ve después de ingresar su dirección y hacer clic en ingresar.
Q2: ¿Cómo cargo con éxito la segunda página?