Lua 错误:'null is not an object (evaluating \'document.querySelector...).click\')'

我正在爬取 https://www.tayara.tn/sc/immobilier/appartements 站点,并需要点击一个 "load more" 按钮。因此我使用了以下 Lua 脚本:

function main(splash, args)
  assert(splash:go(args.url))
  assert(splash:wait(0.5))
  assert(splash:runjs('document.querySelector(".DbXTC b7ygi _1JgR4 _1U08s button").click()'))
  splash:set_viewport_full()
  return {
   html = splash:html(),
   png = splash:png(),
   har = splash:har(),
 }
end

在点击 "render" 按钮后,我遇到了以下错误:

{
"description": "执行 Lua 脚本时发生错误",
"type": "ScriptError",
"info": {
    "line_number": 4,
    "type": "LUA_ERROR",
    "error": "JS error: 'TypeError: null is not an object (evaluating \\'document.querySelector(\".DbXTC b7ygi _1JgR4 _1U08s button\").click\\')'",
    "message": "Lua error: [string \"function main(splash, args)\r...\"]:4: JS error: 'TypeError: null is not an object (evaluating \\'document.querySelector(\".DbXTC b7ygi _1JgR4 _1U08s button\").click\\')'",
    "source": "[string \"function main(splash, args)\r...\"]"
},
"error": 400
}

我错在哪里了?

点赞
用户9383219
用户9383219

似乎 document.querySelector(".DbXTC b7ygi _1JgR4 _1U08s button") 返回 null。在这种情况下,您正在对 null 调用 click 方法。.DbXTC b7ygi _1JgR4 _1U08s 没有意义:它匹配一个位于具有 DbXTC 类的标记中的一个带有_1U08s 的标记中的一个带有 _1JgR4 的标记中的一个带有 b7ygi 的标记中的 <button> 标记。这样的元素不存在,因此 document.querySelector 返回 nulldocument.querySelector(".DbXTC button") 看起来是有效的。

2019-01-25 19:03:14