Ejemplo n.º 1
0
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