如何使用splash选择已选择的元素对象中的元素

时间:2017-05-17 01:57:52

标签: jquery lua scrapy splash scrapy-splash

使用splash:select选择元素后,如何选择在其下面找到的所有子元素?

我用scrapy / splash尝试了这个lua脚本:

function main(splash)
    assert(splash:go(splash.args.url))
    assert(splash:wait(0.9))

    local classlist = splash:select('.class-list')        
    local alinks = classlist:select_all('a')

    return {alinks=alinks}

end

但是我收到以下关于Splash错误的错误请求:

{
    u'info':{
        u'line_number':12,
        u'message':        u'Lua error:[
            string "..."
        ]:12:attempt to call method \'select_all\' (a nil value)',
        u'type':u'LUA_ERROR',
        u'source':u'        [
            string "..."
        ]        ', u'        error':u"attempt to call method 'select_all' (a nil value)"
    },
    u'type':u'ScriptError',
    u'description':u'Error happened while executing Lua script',
    u'error':400
}

我已确认splash:select('.class-list')会返回有效的元素对象。

1 个答案:

答案 0 :(得分:1)

正如您所说,splash:select('.class-list')返回一个有效的元素对象。你的问题是元素对象don't have a select_all method;只有splash object does。相反,您需要将splash:select_all与不同的选择器一起使用。请尝试以下方法(但请注意,因为它未经测试)。

function main(splash)
    assert(splash:go(splash.args.url))
    assert(splash:wait(0.9))
    local alinks = splash:select_all('.class-list a')        
    return {alinks=alinks}
end