2016-03-03 12 views
7

Ho molti ragni che si muovono in parallelo utilizzando scrapyd. Quello che sto facendo è qualcosa come il seguente codice.Esecuzione di selenio senza testa con più ragni

La mia domanda è, ho davvero bisogno di avviare un display per ogni spider e come fa il conducente a sapere di iniziare a utilizzare quale display? Dovrei semplicemente avviare uno schermo a livello globale e avviare più istanze di webdriver all'interno dello stesso display?

def __init__(self): 
    dispatcher.connect(self.spider_closed, signals.spider_closed) 

def spider_closed(self, spider): 
    if self.driver: 
     self.driver.quit() 

    if self.display: 
     self.display.stop() 

def parse(self, response): 
    self.display = Display(visible=0, size=(1024, 768)) 
    self.display.start() 
    self.driver = webdriver.Firefox() 

    self.driver.get(response.url) 
    page = Selector(text=self.driver.page_source) 

    # doing all parsing etc 

risposta

3

Suggerisco di utilizzare il gestore di browser splinter; è un involucro attorno al selenio. Risolve il tuo problema esattamente, poiché la gestione dello schermo viene effettuata dal pacchetto.

Con poche altre installazioni di pacchetto, è anche possibile rimuovere del tutto la necessità di un Display, il che significa che la scheggia è ora senza testa (la finestra del browser non si apre ed è molto più veloce). Controlla il Splinter docs per sapere come fare in senza testa. Personalmente suggerisco il driver PhantomJS, anche se dovrete installare il programma PhantomJS non Python.