Python chromedirver не будет выходить - PullRequest
0 голосов
/ 17 декабря 2018

[Я плохо разбираюсь в английском.Пожалуйста, поймите.:)]

Иногда даже при использовании скрытого тайм-аута драйвер хрома не заканчивается.

Чтобы предотвратить это, я использую Timeout Decorator для Windows.

Тайм-аутхорошо работает декоратор,

Но тогда драйвер Chrome не выключается.

Я также проверил, был ли это тот же объект, но тот же объект.

В чем причина?

Кажется, он использует декоратор тайм-аута ... (драйвер Chrome также является последней версией.)

self.driver.quit () <----Существует проблема с этим методом. </p>

@timeout(10)
def driver_quit(self):
    self.driver.quit()

@timeout(120)
def driver_get(self, url):
    self.driver.get(url)


def call_url(self, url):
    try:
        self.driver_get(url)
    except Exception as e:
        try:
            self.driver_quit()
        except Exception as e:
            pass



def timeout(timeout):
    from threading import Thread
    import functools


    def deco(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            res = [Exception('function [%s] timeout [%s seconds] exceeded!' % (func.__name__, timeout))]
        def newFunc():
            try:
                res[0] = func(*args, **kwargs)
            except Exception as e:
                res[0] = e

        t = Thread(target=newFunc)
        t.daemon = True
        try:
            t.start()
            t.join(timeout)
        except Exception as je:
            print('error starting thread')
            raise je
        ret = res[0]
        if isinstance(ret, BaseException):
            raise ret
        return ret

    return wrapper

return deco

=============== Модифицированный код ===============

WebDriverException наконец-то происходит,

, но Chamedriver закрыл эту строку ==> driver.close ().

def call_url(self, url):
    try:
        self.driver_get(url)
    except:
         try:
             self.driver_quit()
         except:
             pass
         finally:
             self.driver.close()
             self.driver.quit()

1 Ответ

0 голосов
/ 17 декабря 2018

Обходной путь должен вызвать оба driver.quit() и driver.close().

. Для этого вы можете поместить команды в оператор finally:.

try: и except: затем используйте оператор finally: в конце.

try:
    # do my automated tasks
except:
    pass
finally:
    driver.close()
    driver.quit()

РЕДАКТИРОВАТЬ

Если вы обнаружите, что это вам не поможетпросто сообщите об ошибке Селену и сопровождающим веб-драйвера.

Надеюсь, это поможет вам!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...