Довольно много вопросов!
«Почему у Selenium с Python такая задержка для выдачи команд»
I у нас нет никаких прямых ссылочных доказательств для этого, но задержка селена, вероятно, связана с объемом работы, которую он должен выполнить. Он был создан для тестирования, а не для производительности. Разница в том, что самая ценная часть теста - это то, что он ДОЛЖЕН выполняться надежно, если он медленнее и выполняет больше проверок, чтобы сделать его более надежным, чем так оно и есть. Вы по-прежнему получаете значительный прирост производительности по сравнению с ручным тестированием, и это то, что мы заменяем.
Здесь вам понадобится надежность - и я вижу, вы упоминаете об этом в своем вопросе. Замечательно, если у вас есть торговый скрипт, который может завершить действие за <1 с, но что, если он терпит неудачу в 5% случаев? Насколько это вызовет проблемы? </p>
Selenium также должен отображать GUI, а затем, в зависимости от того, как вы идентифицируете свои объекты, ему необходимо сканировать всю DOM для того, что вы хотите. Локаторы Generi c логически займут больше времени.
Большая сила Selenium - это простота и возможность синхронизации. Во многих статьях SO много говорится о webdriverwait (что отлично подходит для синхронизации внутристраничных скриптов c), но есть также хорошее распознавание времени ожидания загрузки страницы. т.е. нет смысла нажимать кнопку до того, как весь исходный код будет загружен.
«Почему у Puppeteer меньше задержка при взаимодействии с тем же браузером?» Puppeteer работает с chrome devtools - селен работает с DOM. Таким образом, эти двое взаимодействуют по-разному. Очевидно, кукловод предназначен только для chrome, но селен может go практически для любого браузера. Для вас это может не быть проблемой, если вам не важны возможности кроссбраузерности.
Однако - насколько это на самом деле быстрее?
В таймингах выполнения вы также можете захотеть до фактор всего жизненного цикла того, что вы стремитесь сделать, а именно: время загрузки браузера и время отображения страницы. Из вашего рассказа вы хотите что-то купить или продать. Итак, вы запускаете сценарий - сколько времени проходит от нажатия GO до конечного результата. Скорее всего, вам потребуется синхронизация, и именно здесь кукловод может быть не таким сильным (или вам потребуется гораздо больше времени, чтобы разобраться в этом). задержка насколько возможно », , но сначала нужно перейти на страницу и привести ее в нужное состояние. Меня бы не волновали миллисекунды на действие. Открытие chrome не является самым быстрым действием само по себе, и ваш общий миллисекундный тест становится от> секунд до минут.
Когда у вас есть полный сценарий селена, занимающий 65 секунд, и сценарий кукольника, занимающий 64 секунды, общее рассмотрение Изменения: -)
Некоторые другие варианты, о которых стоит подумать, если вам действительно нужна скорость:
- Попробуйте запустить selenium без головы - нет gui, меньше ресурсов, работает быстрее. (google it): -)
- Попробуйте другие браузеры
- Если вы все о скорости - полностью откажитесь от GUI. Создайте сценарий API или начните исследовать использование сценариев производительности (например, jmeter или loadrunner).
- Другой вариант, который не является селеном или кукловодом, - это javascript напрямую в браузере
- Попробуйте свои тесты скорости с помощью других бесплатных веб-инструментов, например cypress или драматурга Microsoft - они напрямую взаимодействуют с JS в браузере и хвастаться некоторыми превосходными встроенными функциями стабильности.
Если бы это был я, и речь шла об одном действующем действии - мой первый порт вызова выполнял бы его на уровне API. Есть много ресурсов и сайтов для практики, которые помогут вам начать работу, и нет браузера для рендеринга, почти нет ничего, кроме сетевой задержки. Это реальный способ сохранить его в виде субсекундного скрипта.
Последняя мысль, когда вы спрашиваете: « можно ли улучшить »: если у вас есть код, могут быть другие способы сделать его быстрее. Поделитесь своим сценарием, и я уверен, что люди с удовольствием потратят свои 2 цента на то, как вы можете его оптимизировать: -)