当前位置: 首页 > 知识库问答 >
问题:

如何让Lua无限次地点击“加载按钮”?

夹谷弘亮
2023-03-14

这是我第一次用飞溅刮网站。我需要告诉spash点击一个按钮,以便其他元素加载到浏览器上。这是无限的。然后我希望飞溅返回超文本标记语言代码,这样我就可以用我的蜘蛛刮掉它。加载按钮没有href,所以我不能使用分页。因此,我试图写一个闪存脚本来做到这一点。但是当我用Splash运行脚本时,似乎“btn”部分在返回的超文本标记语言中没有任何作用(每次只返回第一页的超文本标记语言)。)

这是我写的Splash脚本:

function main(splash,args)

    local function wait_for(it)
        item=splash:select(it)
        while not item:visible() do
            splash:wait(0.25)
            item=splash:select(it)
            return item
        end 
    end 

    splash.private_mode_enabled=false
    local head={'User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome'}
    assert(splash:go(args.url,headers=head))

    selector='.undefined.btn.small-Font'
    wait_for(selector):mouse_click()

    selector='.rtl.custom-container.pb-5'
    wait_for(selector):mouse_click()

    return splash:html()

end

谁能帮助我理解我如何告诉splash“当“加载按钮”存在时,按下它,然后立即返回整个HTML”?

顺便说一句,这里是我想要抓取的非英语URL:http://namlik.me/channels

非常感谢你!!

---编辑---

这是我在响应页面上得到的错误:

{
    "error": 400,
    "type": "ScriptError",
    "description": "Error happened while executing Lua script",
    "info": {
        "source": "[string \"function main(splash,args)\r...\"]",
        "line_number": 14,
        "error": "')' expected near '='",
        "type": "LUA_INIT_ERROR",
        "message": "[string \"function main(splash,args)\r...\"]:14: ')' expected near '='"
    }
}

共有1个答案

宋耀
2023-03-14

如果不存在,请稍等片刻,然后重试。您可以对容器执行相同的操作,而不是splash:wait(10)。https://splash.readthedocs.io/en/stable/scripting-element-object.html#element-可见的

btn = splash :select(".undefined.btn.small-Font")
visible = btn :visible()
while not visible do
    splash :wait( 0.25 )
    btn = splash :select(".undefined.btn.small-Font")
    visible = btn :visible()
end
btn :mouse_click()

等待程序可能是一个函数。

function main( splash, args )

    local function wait_for( it )
        item = splash :select( it )
        while not item :visible() do
            splash :wait( 0.25 )
            item = splash :select( it )
        end  --  visible?
        return item
    end  --  wait_for()

    splash .private_mode_enabled = false
    local head = { 'User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome' }
    splash :set_user_agent( head )
    assert(  splash :go( args .url )  )

    selector = '.undefined.btn.small-Font'
    wait_for( selector ) :mouse_click()

    selector = '.rtl.custom-container.pb-5'
    wait_for( selector ) :mouse_click()

    return splash :html()

end  --  main()
 类似资料:
  • 问题内容: 我正在寻找一种在页面加载时自动“单击”项目的方法。 我尝试使用 但这似乎行不通吗?但是,当我进入Firebug的控制台并运行脚本时,它可以工作。 可以在加载时使用触发事件吗? 问题答案: 您尝试触发的点击处理程序很可能也通过附加了。可能发生的情况是您在附加处理程序之前触发了事件。解决方法是使用: 10ms的延迟将导致该函数在所有处理程序被调用后立即运行。

  • 本文向大家介绍Android如何给按钮添加点击音效,包括了Android如何给按钮添加点击音效的使用技巧和注意事项,需要的朋友参考一下 有很多制作精良的APP都自带点击音效,那么如何简单的来实现这一效果,这里需要使用到的一个概念叫做SoundPool,这个类主要用于播放一些比较小的音频文件,因为比较方便,通常用在游戏里比较多。 代码 闲话不多说,我们现在需要做一个功能,就是点击某一按钮的时候同时播

  • 我有一个内部web应用程序,它有一个模态对话框。不幸的是,我不能在这里发布实际的web应用程序位置,但是让我尽可能地描述一下。 当应用程序启动时,屏幕上会出现一个框,告诉您一堆文本。您可以按“下一页”以获取下一页文本 在最后一页上,“下一步”按钮被禁用,web应用程序的其余UI被启用 页面数量不定,所以我不知道我必须点击“下一步”多少次 我可以点击固定的次数(例如,如果我知道有两个页面,我可以点击

  • 好的,伙计们。我正在尝试创建一个小费计算器,我遇到了一些问题。问题是当用户输入一个值时,程序会询问(禁用enter按钮)用户是否希望包含提示,因此用户选择是或否。如果选择了其中任何一个,前面的问题就消失了,文字出现“小费包括在内”或“小费不包括在内”。现在,如果用户想要编辑上面的值,按钮将再次被启用,但是如果它点击了一个,它将再次询问用户是否想要包含提示。所以我的问题是,我怎样才能使它使它,无论那

  • 本文向大家介绍ios通过按钮点击异步加载图片,包括了ios通过按钮点击异步加载图片的使用技巧和注意事项,需要的朋友参考一下 比较原始的方法: 方法二: 方法三: 实现文件: 以上所述就是本文的全部内容 了,希望大家能够喜欢。

  • 我是android编程新手,有没有一种方法可以使用View在android中加载或显示html文件表单资产文件夹。OnClickListener 让我重新表达我的问题:有没有可能写一个类似下面的代码来调用/加载/显示本地html文件表单资产文件夹时,按钮被点击 如果我不够清楚,一定要告诉我。。 非常感谢!!!!