2016-03-28 13 views
1

Selenyum phantomjileri kullanarak scrapyjs'e dinamik web sitesinin kazıma işlemini değiştirmeye çalışıyorum. Ancak sorun, bir tıklama olayı sıçrama halinde yazarsak, çalışmak için bir getiri isteğine ihtiyaç duyar. Verim talebi verirsek, ilk sayfayı oluşturacaktır. Dolayısıyla, kaynak kodunda tıklama etkinliği değişikliklerini görmüyoruz. Yani, web sayfasını yeniden oluşturmaya gerek yoktur. Selenyumda mümkündür. Sıçramada aynı özellik var mı?Sıçrama + scrapyjs + scrapy'den herhangi bir verim talebi olmadan tıklama olayından sonra html kaynak kodunu nasıl alabiliriz?

cevap

0

Lua değişkenini kullanmak için bir çözümüm var. Splash meta args yoluyla değişkenleri geçirebiliriz. Örnek:

v = 1 
    yield scrapy.Request(url, meta={'splash': {'endpoint': 'execute','args': {'lua_source': script,'indx':v}},'v':v } , callback=self.parseVariationDetailPage , dont_filter=True) 

biz "splash.args.indx" tarafından args geçti indx değerini elde edebilirsiniz.

Aşağıdaki işlev öğeyi gösterir. =================== altında

script = """ 
function main(splash) 
    splash:autoload("https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js") 
    z = splash.args.indx 
    assert(splash:go(splash.args.url)) 
    assert(splash:wait(1)) 
    assert(splash:runjs("$('#listChipColor li[z]').click()")) 
    assert(splash:wait(1)) 
    return splash:html() 
end """ 

===================== Eski cevap ====

Sayfayı scrapyjs tıklama olayı olmadan oluşturmadan bir çözüm göremiyorum.

Örnek kod ve çalışması aşağıdadır. Ls değişkeni yazmak için bir çözüm bulamıyorum. Yani burada tıklama öğesini elde etmek için basit bir mantık kullanın.

scrapyjs tıklayın

script = """ 
    function main(splash) 
     splash:autoload("https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js") 
     assert(splash:go(splash.args.url)) 
     assert(splash:runjs("k = window.location.href")) 
     assert(splash:runjs("l = k.length")) 
     assert(splash:wait(1)) 
     assert(splash:runjs("k = k.charAt(l - 1)")) 
     assert(splash:runjs('document.querySelectorAll("ul.colour-swatches-list > li")[k].click();')) 
     assert(splash:wait(1)) 
     return splash:html() 
end """ 

talep

url = url+"vl="+'%s'%v 
yield scrapy.Request(url, self.parseVariationPage,meta={ 
    'splash': { 
     'args': {'lua_source': script},'endpoint': 'execute'}, 
     'url':url,'type':    response.meta['type'],'category':response.meta['category'],'fit':response. meta['fit'],'v':v 
}) 
+0

Eğer kodun girinti düzeltebilirim? –

+0

Merhaba Paul, Kod girintisini düzelttim. –

İlgili konular