2017-05-17 3 views
1

Nachdem Sie ein Element mit splash:select ausgewählt haben, wie wählen Sie dann alle darunter liegenden Ankerelemente aus?Auswählen von Elementen aus einem bereits ausgewählten Elementobjekt mit splash

Ich habe diesen lua Skript mit scrapy/splash versucht:

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 

Aber ich bekomme die folgenden schlechten Anforderungsfehler 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 
} 

ich bestätigt habe, dass die splash:select('.class-list') ein gültiges Element zurückzugibt Objekt.

Antwort

1

Wie Sie sagen, gibt splash:select('.class-list') ein gültiges Elementobjekt zurück. Ihr Problem ist, dass Elementobjekte don't have a select_all method; nur die splash object does. Stattdessen müssen Sie splash:select_all mit einem anderen Selektor verwenden. Probieren Sie Folgendes (obwohl Vorsicht, wie es ungeprüft ist).

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 
Verwandte Themen