首页 > 解决方案 > Lua 错误:'null 不是对象(评估 \'document.querySelector...).click\')'

问题描述

我正在抓取https://www.tayara.tn/sc/immobilier/appartements,我需要单击“加载更多”按钮,所以我使用了这个 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

单击“渲染”按钮后,出现此错误:

{
"description": "Error happened while executing Lua script",
"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
}

我做错了什么?

标签: dockerweb-scrapingluascrapy-splash

解决方案


这听起来像document.querySelector(".DbXTC b7ygi _1JgR4 _1U08s button")返回null,在这种情况下,您正在调用click方法 on null.DbXTC b7ygi _1JgR4 _1U08s没有意义:它将<button>标签内的标签内的标签<_1U08s>内的<_1JgR4>标签内的<b7ygi>标签内的标签与 class匹配DbXTC。没有这样的元素,所以document.querySelector返回nulldocument.querySelector(".DbXTC button")似乎工作。


推荐阅读