Lua:"error":"尝试调用方法 'mouse_click'(空值)",

我是 Lua 的新手,尝试使用 "for" 循环遍历所有来自 "items" 的链接,并使用 mouse_click() 函数单击所有链接。但它会抛出 "error": "尝试调用方法 'mouse_click'(空值)" 。我该怎么办?我自己尝试了下面提到的代码,但可能会有些遗漏。从文档中,我发现 Lua 有两种类型的 for 循环。数字和通用。但要遍历链接,然后单击它,我必须使用什么?

再一次,我刚刚开始接触 Lua。只是想熟悉它,所以我正在寻求所有专家的指导。

function main(splash, args)

  splash:set_user_agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36")
  splash.private_mode_enabled = false
  assert(splash:go(args.url))
  assert(splash:wait(3))

  items = assert(splash:select("div.item-list-content a"))

  for item in pairs(items) do
    item:mouse_click()
    assert(splash:wait(5))
  end

  splash:set_viewport_full()
  return {
    html = splash:html(),
    png = splash:png(),
    har = splash:har(),
  }
end

输出

{
    "error": 400,
    "type": "ScriptError",
    "description": "执行 Lua 脚本时发生错误",
    "info": {
        "source": "[string \"function main(splash, args)\r...\"]",
        "line_number": 11,
        "error": "尝试调用方法 'mouse_click'(空值)",
        "type": "LUA_ERROR",
        "message": "Lua 错误:[string \"function main(splash, args)\r...\"]:11: 尝试调用方法 'mouse_click'(空值)"
    }
}

原文链接 https://stackoverflow.com/questions/70476229

点赞
stackoverflow用户1442917
stackoverflow用户1442917

Select 仅返回一个元素,因此使用 pairs 进行迭代 (您将遍历该元素的字段,这可能不是您想要的) 是没有意义的。您可能要使用 select_all,然后使用 ipairs 遍历与选择器匹配的元素。有关详细信息和示例,请参见 select 文档。

[更新以回答您的评论] 如果您查看我引用的示例,您会看到它看起来像这样:

    local imgs = splash:select_all('img')
    local srcs = {}

    for _, img in ipairs(imgs) do
      srcs[#srcs+1] = img.node.attributes.src
    end

因为 ipairs 返回两个值(索引和其值),所以您必须使用 for _, item in ipairs(items) 而不是 for item in ipairs(items)(因为在后一种情况下,item 将获得索引值而不是项目)。

2021-12-25 00:02:40