2016-12-10 2 views
2

Я использовал драйвер Firefox Selenium для загрузки и удаления веб-страниц у некоторых пауков в моем проекте Scrapy.Selenium запускает драйвер Firefox для пауков, не используемых в

Проблема:
Селен запускает экземпляр Firefox при запуске всех пауков, события эти я не импортирован webdriver и не называется webdriver.Firefox() в

Ожидаемое поведение:.
Селен пробегов экземпляр Firfox только, когда я запускаю пауков, которые были использованы webdriver.Firefox() in.

Почему это важно?
Я ухожу из экземпляра Firefox после того, как паук сделан, но наглядно это не происходит у пауков, не использующих Selenium.

паук, который не использует Selenium
Этот паук не использует Selenium, и я ожидаю, что это не для запуска Firefox.

class MySpider(scrapy.Spider): 
    name = "MySpider" 
    domain = 'www.example.com' 
    allowed_domains = ['http://example.com'] 
    start_urls = ['http://example.com'] 

    def parse(self, response): 
     for sel in response.css('.main-content'): 
      # Article is a scrapy.item 
      item = Article() 
      item['title'] = sel.css('h1::text').extract()[0] 
      item['body'] = sel.css('p::text').extract()[0] 
      yield item 
+0

Просьба уточнить вашу конкретную проблему или добавить дополнительные детали, чтобы выделить именно то, что вам нужно. Как это написано в настоящее время, трудно точно сказать, что вы просите. См. Страницу [ask] для выяснения этого вопроса. – JeffC

+0

@JeffC надеюсь, что теперь ясно. спасибо – Reyraa

+0

Это не помогает. Ваш код показывает, как вы создаете браузер Firefox в классе 'MySpider'. Почему вы ожидаете, что он не будет работать? – JeffC

ответ

2

вопрос был на самом деле в том, как я был инстанцированием webdriver.Firefox модуля в пауках, которые были предназначены для использования Selenium:

class MySpider(scrapy.Spider): 
    # basic scrapy setting 
    driver = webdriver.Firefox() 

    def parse(self, response): 
     self.driver.get(response.url) 
     result = scrapy.Selector(text=self.driver.page_source) 
     # scrap and yield items to pipeline 
     # then in certain condition: 
     self.driver.quit() 

Почему это происходило?
При выполнении команд Scrapy python интерпретирует все классы в проекте. поэтому независимо от того, какой паук я пытался запустить, Selenium запускал новый экземпляр webdriver.Firefox для каждого класса пауков, содержащего эту командную строку.

Решение
Просто переехал WebDriver конкретизации к методу класса инициализации:

def __init__(self): 
    self.driver = webdriver.Firefox() 
Смежные вопросы