Scrapy с селеном, webdriver не удается создать экземпляр

Я пытаюсь использовать selenium / phantomjs с scrapy, и я пронизан ошибками. Например, возьмите следующий фрагмент кода:

def parse(self, resposne):

    while True:
        try:
            driver = webdriver.PhantomJS()
            # do some stuff
            driver.quit()
            break
        except (WebDriverException, TimeoutException):
            try:
                driver.quit()
            except UnboundLocalError:
                print "Driver failed to instantiate"
            time.sleep(3)
            continue

много раз драйвер, похоже, не удалось создать экземпляр (так что driver не привязан, следовательно, исключение), и я получаю blurb (вместе с сообщением печати, которое я вставил)

Exception AttributeError: "'Service' object has no attribute 'process'" in <bound method Service.__del__ of <selenium.webdriver.phantomjs.service.Service object at 0x7fbb28dc17d0>> ignored

Googling вокруг, кажется, все предлагают обновить phantomjs, который у меня есть (1.9.8 построены из источника). Кто знает что еще может быть причиной этой проблемы и подходящего диагноза?

3 ответов


причиной такого поведения является то, как драйвер PhantomJS Service класс есть.

есть __del__ определен метод, который вызывает self.stop() способ:

def __del__(self):
    # subprocess.Popen doesn't send signal on __del__;
    # we have to try to stop the launched process.
    self.stop()

и self.stop() предполагает, что экземпляр службы все еще жив, пытаясь получить доступ к его атрибутам:

def stop(self):
    """
    Cleans up the process
    """
    if self._log:
        self._log.close()
        self._log = None
    #If its dead dont worry
    if self.process is None:
        return

    ...

та же самая точная проблема прекрасно описана в этой теме:


что вы должны сделать, это молча игнорировать AttributeError происходит при выходе из экземпляра драйвера:

try:
    driver.quit()
except AttributeError:
    pass

проблема была введена этим редакция. Это означает, что понижение до 2.40.0 также может помочь.


У меня была эта проблема, потому что phantomjs был недоступен из скрипта (не был в пути). Вы можете проверить это, запустив phantomjs в консоли.


Selenium версии 2.44.0 на pypi нуждается в следующем патче в Service.__init__ of selenium.webdriver.common.phantomjs.service

self.process = None

Я думал о представлении патча, но это уже существует в самая последняя версия на код google.