我正在学习使用带有splash的scrapy。作为练习,我正在尝试访问https://www.ubereats.com/stores/,单击地址文本框,输入位置,然后按 Enter 按钮移动到包含该餐厅的下一页地点。我有以下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
当我点击“渲染!” 在启动 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 表达式是错误的,导致飞溅试图访问未定义/无的元素!我试过其他表达方式,但我似乎无法弄清楚!
问:有谁知道如何解决这个问题?
编辑:尽管我仍然想知道如何实际单击元素,但我想出了如何仅使用键来获得相同的结果:
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
但是,splash API 中返回的 html/images 来自您输入地址的页面,而不是您输入地址并单击回车后看到的页面。
Q2:如何成功加载第二页?