Я автоматизирую веб-сайт с помощью Selenium на C#. Мой вариант использования предполагает открытие до 50 вкладок в одном экземпляре браузера, а также одновременное использование нескольких экземпляров браузера в отдельных потоках.
Я тестировал его в нескольких системах с разными требованиями.
Я тестировал его в нескольких системах с разными требованиями.
Я тестировал его в нескольких системах с разными требованиями.
p>
Core i5-5-го поколения, 8 ГБ ОЗУ — SSD
Core i7-7-го поколения, 16 ГБ ОЗУ — SSD
Ядро i7-6-го поколения, 32 ГБ ОЗУ — твердотельный накопитель
на более качественной машине работает несколько лучше, но все равно вызывает проблемы.
Чтобы открыть новую вкладку, я использую следующую команду:
var tab = Driver.SwitchTo().NewWindow(WindowType.Tab);
Поначалу это работает нормально, но по мере роста количества вкладок (около 50) производительность значительно снижается. А именно:
Команда Driver.SwitchTo().NewWindow(WindowType.Tab) начинает выполняться долго (до 30 секунд или подробнее) просто чтобы открыть новую вкладку.
В некоторых случаях через 60 секунд выдается исключение тайм-аута.
Когда это происходит, новая вкладка вкладка открывается, но остается в состоянии «загрузка» (как будто страница все еще загружается) и не фокусируется автоматически. Если я вручную нажму на новую вкладку в браузере, команда завершится успешно.
Мой процесс требует, чтобы я открыл новую вкладку, обработал страницу, а затем повторил действия для последующих вкладок. Я не могу закрыть вкладку, прежде чем открыть другую, поэтому мне приходится держать открытыми несколько вкладок одновременно.
Эта проблема усугубляется, если несколько браузеров работают параллельно.
Если в начале моей программы я открываю все вкладки одновременно, она также работает намного лучше, она становится медленнее по мере увеличения вкладок, но тогда это занимает 3,4 секунды, но если я открываю их одну за другой и обрабатываю страницу (что включая заполнение формы и добавление вложения) это будет медленно, если я при запуске одного браузера иногда он все равно завершается полностью, но при использовании нескольких браузеров в большинстве случаев происходит сбой из-за тайм-аута.
Также другие команды будут работать медленно, например Driver.WindowHandles или Driver.SwitchTo().Window(window) или Driver.CurrentWindowHandle, даже эта Driver.Url
Что я пробовал:
Обходной путь с помощью расширения для браузера: я установил расширение для браузера, которое прослушивает сигналы и открывает вкладки по команде. Этот обходной путь работает нормально, но мне приходится открывать все вкладки одновременно, чего я хочу избежать, а также я бы предпочел по возможности избегать использования расширений.
< li>Изучены ограничения на количество вкладок, но не найдено четкого указания, почему эта проблема возникает при большом количестве вкладок.
Вопросы
Почему открытие новой вкладки замедляется или происходит тайм-аут по мере увеличения количества открытых вкладок?
Есть ли способ оптимизировать обработку вкладок в Selenium, чтобы избежать этих проблем с производительностью?
Есть ли в Selenium альтернативные подходы или конфигурации для эффективной обработки большого количества вкладок?
Я также подумываю о переходе на Playwright, как и сделал слышал, что для автоматизации браузера не используется протокол WebDriver, а используется DevTools Protocol, но я не уверен, имеет ли это какое-либо значение или нет. на данный момент
Я автоматизирую веб-сайт с помощью Selenium на C#. Мой вариант использования предполагает открытие до 50 вкладок в одном экземпляре браузера, а также одновременное использование нескольких экземпляров браузера в отдельных потоках. Я тестировал его в нескольких системах с разными требованиями. Я тестировал его в нескольких системах с разными требованиями. Я тестировал его в нескольких системах с разными требованиями. p> [list] [*]Core i5-5-го поколения, 8 ГБ ОЗУ — SSD [*]Core i7-7-го поколения, 16 ГБ ОЗУ — SSD[*]Ядро i7-6-го поколения, 32 ГБ ОЗУ — твердотельный накопитель [/list] на более качественной машине работает несколько лучше, но все равно вызывает проблемы. Чтобы открыть новую вкладку, я использую следующую команду: [code]var tab = Driver.SwitchTo().NewWindow(WindowType.Tab);[/code] Поначалу это работает нормально, но по мере роста количества вкладок (около 50) производительность значительно снижается. А именно: [list] [*]Команда Driver.SwitchTo().NewWindow(WindowType.Tab) начинает выполняться долго (до 30 секунд или подробнее) просто чтобы открыть новую вкладку. [*]В некоторых случаях через 60 секунд выдается исключение тайм-аута. [*]Когда это происходит, новая вкладка вкладка открывается, но остается в состоянии «загрузка» (как будто страница все еще загружается) и не фокусируется автоматически. Если я вручную нажму на новую вкладку в браузере, команда завершится успешно. Мой процесс требует, чтобы я открыл новую вкладку, обработал страницу, а затем повторил действия для последующих вкладок. Я не могу закрыть вкладку, прежде чем открыть другую, поэтому мне приходится держать открытыми несколько вкладок одновременно. [*]Эта проблема усугубляется, если несколько браузеров работают параллельно. [*]Если в начале моей программы я открываю все вкладки одновременно, она также работает намного лучше, она становится медленнее по мере увеличения вкладок, но тогда это занимает 3,4 секунды, но если я открываю их одну за другой и обрабатываю страницу (что включая заполнение формы и добавление вложения) это будет медленно, если я при запуске одного браузера иногда он все равно завершается полностью, но при использовании нескольких браузеров в большинстве случаев происходит сбой из-за тайм-аута. [/list] [list] [*]Также другие команды будут работать медленно, например Driver.WindowHandles или Driver.SwitchTo().Window(window) или Driver.CurrentWindowHandle, даже эта Driver.Url [/list] [b]Что я пробовал:[/b] [list][*]Обходной путь с помощью расширения для браузера: я установил расширение для браузера, которое прослушивает сигналы и открывает вкладки по команде. Этот обходной путь работает нормально, но мне приходится открывать все вкладки одновременно, чего я хочу избежать, а также я бы предпочел по возможности избегать использования расширений.
< li>Изучены ограничения на количество вкладок, но не найдено четкого указания, почему эта проблема возникает при большом количестве вкладок.
[/list] [b]Вопросы[/b] [list] [*]Почему открытие новой вкладки замедляется или происходит тайм-аут по мере увеличения количества открытых вкладок? [*]Есть ли способ оптимизировать обработку вкладок в Selenium, чтобы избежать этих проблем с производительностью? [*]Есть ли в Selenium альтернативные подходы или конфигурации для эффективной обработки большого количества вкладок? [/list] Я также подумываю о переходе на Playwright, как и сделал слышал, что для автоматизации браузера не используется протокол WebDriver, а используется DevTools Protocol, но я не уверен, имеет ли это какое-либо значение или нет. на данный момент