def setup_proxy_for_driver(driver: webdriver, test_url=None, times=0): if times > 9: logger.warning('setup_proxy_for_driver no available proxy') raise TooManyTimesException('setup_proxy_for_driver') try: try: # clean cookie and close session driver.delete_all_cookies() driver.quit() except: pass proxy_url = get_proxy().get('proxy') logger.info('proxy get {}'.format(proxy_url)) capabilities = get_capabilities(proxy_url) logger.info('start new session') driver.start_session(capabilities=capabilities) logger.info('start testing proxy') ok = test_proxy(driver, test_url, proxy_url) if not ok: logger.warning('proxy checking failed for {} times'.format(times + 1)) return setup_proxy_for_driver(driver, test_url, times=times + 1) logger.info('proxy works') return driver except SessionNotCreatedException: logger.error('Failed to start a new session') return setup_proxy_for_driver(connect_to_driver(), test_url, times=times + 1) except InvalidSessionIdException as e2: logger.error('Session id invalid {}'.format(e2)) return setup_proxy_for_driver(driver, test_url, times=times + 1) except WebDriverException as e3: logger.error('No active session with ID') return setup_proxy_for_driver(driver, test_url, times=times + 1) except NoProxyAvailableException: logger.error('No proxy') mongo._report_error({ 'error_source': 'proxy', 'message': 'no_proxy_available', 'url': None, 'payload': {} }) return setup_proxy_for_driver(driver, test_url, times=times + 1) except Exception as e: logger.error(f'setup_proxy_for_driver {e}') raise e