2017-05-17 1 views
1

Après avoir sélectionné un élément à l'aide de splash:select, comment sélectionner tous les éléments d'ancrage trouvés comme des enfants sous cet élément?Comment sélectionner des éléments d'un objet élément déjà sélectionné avec splash

J'ai essayé ce script lua avec scrapy/éclaboussures:

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 

mais je reçois la demande mauvaise suite à éclabousser erreur:

{ 
    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 
} 

Je confirme que le splash:select('.class-list') retourne un élément valide objet.

Répondre

1

Comme vous le dites, splash:select('.class-list') renvoie un objet élément valide. Votre problème est cet élément éléments don't have a select_all method; seulement le splash object does. Au lieu de cela, vous devez utiliser splash:select_all avec un sélecteur différent. Essayez ce qui suit (attention, car il n'a pas été testé).

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