2016-03-03 12 views
7

Scrapyd kullanarak paralel olarak çalışan pek çok terapi örümceğim var. Yaptığım şey, aşağıdaki kod gibi bir şey.Selenium'u birden çok örümcek ile başsız çalışan

Soruma göre, gerçekten her örümceğin bir ekran görüntüsünü başlatmam gerekiyor mu ve sürücü hangi ekranı kullanmaya başladığını nereden biliyor? Sadece bir ekranı global olarak başlatmalı ve aynı Ekranda birden fazla web tarayıcı örneğini başlatmalı mıyım?

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 

cevap

3

Bunun yerine splinter tarayıcı işleyicisini kullanmanızı öneririz; selenyum etrafındaki sarıcıdır. Ekran kullanımı paket tarafından yapıldığı için sorununuzu tam olarak çözer.

Birkaç paket yüklemeyle, bir Ekran gereksinimini tamamen kaldırabilirsiniz, yani artık dağıtma artık başsızdır (tarayıcı penceresi açılmaz ve çok daha hızlıdır). Başsız olarak nasıl yapılacağını öğrenmek için Splinter docs'a bakın. Python olmayan PhantomJS programını yüklemeniz gerekse bile PhantomJS sürücüsünü şahsen öneririm.