Перейти к содержимому

Фотография

Python' ом закрыть и повторно открыть браузер (тупит, гадюка)

python

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 12

#1 Emc2

Emc2

    Новый участник

  • Members
  • Pip
  • 11 сообщений

Отправлено 07 декабря 2016 - 09:57

Здравствуйте. Такая болячка. Запускается браузер, открывает целевую страничку. Визуально всё прорисовано. Колёсико загрузчика браузера (не загрузчик страницы) продолжает крутиться. Скрипт дальше не двигается. Длится вечно

driver = webdriver.Chrome('/home/ххх/chromedriver')
driver.get('https://site.com/')
try:
    oa = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID,"auth-form-container")))
except Exception as e:
    print e

Элементы формы в браузере отображаются, всё путём, по идее. По истечении ожидания - 10 сек ничего не происходит. Исключений не даёт. Не понятно что с этим делать.

Как это дело забороть?

Закрыть браузер и повторить попытку было бы приемлемо. Как это сделать, подскажите пожалуйста.

Или может есть лучшие решения?

Спасибо


  • 0

#2 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 07 декабря 2016 - 10:06

а что должно происходить ? у тебя в коде написано подождать элемент и все. Драйвер его подождал и отключился, test passed

 

Закрытие браузера:

driver.close()

а для того, что бы в стеке выводилось test passed используй какие нибудь фреймворки для тестирования (PyTest, UnitTest)


  • 0

#3 Emc2

Emc2

    Новый участник

  • Members
  • Pip
  • 11 сообщений

Отправлено 07 декабря 2016 - 10:33

Сайт перегружен и подобные затыки возникают и на последующих этапах работы со страницей. Нужно повторить попытку. Вероятность повторного сбоя сильно меньше.

 

у тебя в коде написано подождать элемент и все. Драйвер его подождал и отключился

Мило. Хорошо бы получить типа oa = true

Тогда начинать искать нужные элементы и работать с содержимым.

Как правильно организовать ветвление на этом этапе? WebDriverWait просто ожидает и всё? Я полагал, что ждёт заагрузки конкретного элемента. Если дождался в заданный таймаут - даёт true, если нет false Или типа того. Иначе это просто sleep(10). Нет?

 

selenium test passed в гугле не знают. Это чем поможет и где искать?


  • 0

#4 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 07 декабря 2016 - 12:26

driver.get('https://site.com/') - ждет полной загрузки страницы

 

presence_of_element_located лучше заменить на element_to_be_clickable

 

и попробуй вынуть oa из трай кетча , тогда тест отвалится и ты увидишь exception , который можешь потом в трай кетче опять же использовать

 

oa = true ты не дождешься, тк оно возвращает не булево значение


  • 0

#5 Emc2

Emc2

    Новый участник

  • Members
  • Pip
  • 11 сообщений

Отправлено 09 декабря 2016 - 10:59

driver.get() ждёт полной загрузки страницы. В этом вся проблема.

Загружается масса всякой рекламы. Не всегда удачно. А driver.get() ждёт и ждёт. Пока не закончит, driver.close() бесполезно.

Стало быть нужно подождать пару секунд, если driver.get() не отработал, то просто убивать процесс

Lzk, спасибо Вам за подсказки.

Чёто реакция сообщества слабая.

Что у всех всё гладко грузится? Или вопрос детский? Ну подскажите начинающему! Пожалуйста.


  • 0

#6 baxatob

baxatob

    Опытный участник

  • Members
  • PipPipPipPip
  • 258 сообщений
  • ФИО:Юрий
  • Город:Riga

Отправлено 09 декабря 2016 - 11:13

А разобрались, что именно не догружается на странице? В консоли смотрели? Может уже на этом уровне баг зарылся.


  • 0

#7 Emc2

Emc2

    Новый участник

  • Members
  • Pip
  • 11 сообщений

Отправлено 09 декабря 2016 - 11:14

а если запускать через паузу driver2.get(), если driver1.get() не ответил. Ну и так дальше. С ответившим продолжать работу, а зависшие сами поотваливаются.

А?


  • 0

#8 Emc2

Emc2

    Новый участник

  • Members
  • Pip
  • 11 сообщений

Отправлено 09 декабря 2016 - 11:16

baxatob, там всё время с разных ресурсов подгрузка глючит. В часы пик, вообще "туман"


  • 0

#9 baxatob

baxatob

    Опытный участник

  • Members
  • PipPipPipPip
  • 258 сообщений
  • ФИО:Юрий
  • Город:Riga

Отправлено 09 декабря 2016 - 11:40

Открытие нескольких драйверов может помочь, если только параллелить сессии через Grid.

А вы на живую что ли тестируете? Отключить рекламу не пробовали?


  • 0

#10 Emc2

Emc2

    Новый участник

  • Members
  • Pip
  • 11 сообщений

Отправлено 09 декабря 2016 - 11:47

 

Отключить рекламу не пробовали?

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


  • 0

#11 baxatob

baxatob

    Опытный участник

  • Members
  • PipPipPipPip
  • 258 сообщений
  • ФИО:Юрий
  • Город:Riga

Отправлено 09 декабря 2016 - 12:06

1. Самое простое - попросить разработчиков. Но это не ваш вариант, судя по всему.

2. Поставить плагин, который блокирует рекламу, и спрофилировать вебдрайвер, чтобы он использовал этот плагин. Подробнее гуглите. Например, тут >> Нужно эксперементировать.


  • 0

#12 Emc2

Emc2

    Новый участник

  • Members
  • Pip
  • 11 сообщений

Отправлено 09 декабря 2016 - 12:14

спасибо, буду пробовать


  • 0

#13 Emc2

Emc2

    Новый участник

  • Members
  • Pip
  • 11 сообщений

Отправлено 10 декабря 2016 - 16:44

DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.PAGE_LOAD_STRATEGY, "eager");
WebDriver driver = new FirefoxDriver(capabilities);
WebDriverWait wait = new WebDriverWait(driver, 10);

Помогите пожалуйста.

Переписать  это будет на Python

from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

capabilities = DesiredCapabilities.CHROME()
capabilities.setCapability(CapabilityType.PAGE_LOAD_STRATEGY, "eager")
driver = webdriver.Chrome('/.../chromedriver', capabilities)

отдает

capabilities = DesiredCapabilities.CHROME()
TypeError: 'dict' object is not callable

  • 0



Темы с аналогичным тегами python

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных