Как закончить сеанс в Selenium и начать новый? - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь выйти из сеанса браузера и запустить новый, когда возникла исключительная ситуация. Обычно я бы не стал этого делать, но в данном конкретном случае это, кажется, имеет смысл.

def get_info(url):
    browser.get(url)
    try:
        #get page data
        business_type_x = '//*[@id="page-desc"]/div[2]/div'
        business_type = browser.find_element_by_xpath(business_type_x).text
        print(business_type)
    except Exception as e:
        print(e)
        #new session
        browser.quit()
        return get_info(url)

Это приводит к этой ошибке: http.client.RemoteDisconnected: Remote end closed connection without response

Я ожидал, что он откроет новое окно браузера с новым сеансом. Любые советы приветствуются. Спасибо!

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Это сообщение об ошибке ...

http.client.RemoteDisconnected: Remote end closed connection without response

... означает, что экземпляр WebDriver , то есть browser не смог связаться с Контекстом просмотра т. е. сеанс просмотра веб-страниц .

Если ваш сценарий использования продолжает пытаться вызвать тот же url в al oop, пока нужный элемент не будет найден, вы можно использовать следующее решение:

def get_info(url):
    while True:
        browser.get(url)
        try:
            #get page data
            business_type_x = '//*[@id="page-desc"]/div[2]/div'
            business_type = browser.find_element_by_xpath(business_type_x).text
            print(business_type)
            break
        except NoSuchElementException as e:
            print(e)
            continue
1 голос
/ 12 февраля 2020

Вам нужно снова создать объект драйвера, как только вы это сделаете. Снова запустите драйвер в методе get_info.

Вы можете заменить webdriver.Firefox() тем драйвером, который вы используете.

def get_info(url):
    browser = webdriver.Firefox()
    browser.get(url)
    try:
        #get page data
        business_type_x = '//*[@id="page-desc"]/div[2]/div'
        business_type = browser.find_element_by_xpath(business_type_x).text
        print(business_type)
    except Exception as e:
        print(e)
        #new session
        browser.quit()
        return get_info(url)

Вы также можете использовать метод close вместо quit. Чтобы вам не приходилось заново создавать объект браузера.

def get_info(url):
    browser.get(url)
    try:
        #get page data
        business_type_x = '//*[@id="page-desc"]/div[2]/div'
        business_type = browser.find_element_by_xpath(business_type_x).text
        print(business_type)
    except Exception as e:
        print(e)
        #new session
        browser.close()
        return get_info(url)

разницу между выходом и закрытием можно также найти в документации.

выход

закрыть

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