Я установил код Python для запуска Selenium chromedriver.exe
. В конце пробега я должен browser.close()
закрыть экземпляр. ( browser = webdriver.Chrome()
) Я считаю, что он должен освободиться chromedriver.exe
по памяти (у меня Windows 7). Однако после каждого запуска chromedriver.exe
в памяти остается один экземпляр. Я надеюсь, что есть способ написать что-нибудь на Python, чтобы убить chromedriver.exe
процесс. Очевидно browser.close()
, не работает. Спасибо.
104
Ответы:
согласно Selenium API, вам действительно следует вызвать,
browser.quit()
поскольку этот метод закроет все окна и завершит процесс. Вы все равно должны использоватьbrowser.quit()
.Однако : на моем рабочем месте мы заметили огромную проблему при попытке выполнить тесты chromedriver на платформе Java, где chromedriver.exe фактически все еще существует даже после использования
browser.quit()
. Чтобы противостоять этому, мы создали командный файл, подобный приведенному ниже, который просто принудительно закрывает процессы.kill_chromedriver.bat
Поскольку chromedriver.exe не является большой программой и не потребляет много памяти, вам не нужно запускать ее каждый раз, а только тогда, когда она представляет проблему. Например, при запуске Project-> Clean в Eclipse.
источник
quit
метод, это не должно быть проблемой. Насильственное уничтожение процессов должно быть только крайней мерой, и ваш ответ должен это отражать.X
она все равно останется. это ЕДИНСТВЕННАЯ причина для этого командного файла. Очевидно,quit
это правильный путь, однако в моем примере, если вы отлаживаете и останавливаете выполнение - он никогда не достигаетquit
.I hope there is a way I can write something to kill the chromedriver.exe process.
. и да, это приятно! Java этого не делаетbrowser.close()
закроет только текущее окно Chrome.browser.quit()
должен закрыть все открытые окна, а затем выйти из webdriver.источник
browser.quit()
закрыл все открытые окна. Но chromedriver.exe не был закрыт. И появилось сообщение об ошибке InvalidURL: nonnumeric port: 'port' '.browser = webdriver.Firefox()
. Обаbrowser.close()
иbrowser.quit()
закроют все окна и освободят память. Однако хромодрайвер не сделал бы того же.Теоретически вызов browser.Quit закроет все вкладки браузера и убьет процесс.
Однако в моем случае я не смог этого сделать - поскольку я запускал несколько тестов параллельно, я не хотел, чтобы один тест закрыл окна для других. Поэтому, когда мои тесты заканчиваются, остается много запущенных процессов "chromedriver.exe".
Чтобы преодолеть это, я написал простой код очистки (C #):
источник
источник
У меня был успех при использовании
driver.close()
раньшеdriver.quit()
. Раньше я только использовалdriver.quit()
.источник
Это как-то странно, но у меня это работает. У меня была аналогичная проблема, после некоторого рытья я обнаружил, что в браузере все еще происходит действие пользовательского интерфейса (загрузка URL-адреса или около того), когда я нажимаю
WebDriver.Quit()
.Решение для меня (хотя и очень неприятное) заключалось в том, чтобы добавить
Sleep()
3 секунды перед вызовом Quit ().источник
WebDriver.Quit()
же самое раньше, но иногда оставался один процесс chrome.exe живым. Также я предполагаю, что это происходит не во всех операционных системах.Этот ответ - как правильно избавиться от драйвера в C #.
Если вы хотите использовать «правильный» механизм, который следует использовать для «уборки» после запуска,
ChromeDriver
вы должны использоватьIWebDriver.Dispose();
Я обычно использую
IDisposable
класс, который имеет дело сIWebDriver
и используйте его как:
Надеюсь, это сэкономит вам время
источник
using (var driver = new ChromeDriver()) { //my code here }
Иногда, не всегда, "что-то" (не знаю, что ??) происходит иchromedriver.exe
, согласно моему диспетчеру задач, до сих пор не выпущено.Завершение нескольких процессов из командной строки Первое, что вам нужно сделать, это открыть командную строку, а затем использовать команду taskkill со следующим синтаксисом:
Эти параметры принудительно завершат любой процесс, соответствующий имени указанного исполняемого файла. Например, чтобы убить все процессы iexplore.exe, мы будем использовать:
источник
Код c #
с помощью System.Diagnostics;
с помощью System.Management;
и эта функция
Вызов
источник
У меня была такая же проблема при запуске на Python, и мне пришлось вручную запустить команду killall, чтобы убить все процессы. Однако, когда я реализовал драйвер с использованием протокола управления контекстом Python , все процессы пропали. Кажется, что интерпретатор Python действительно хорошо помогает навести порядок.
Вот реализация:
И использование:
источник
Итак, вы можете использовать следующее:
Закройте браузер (имитирует нажатие кнопки закрытия)
Закройте браузер (имитирует выбор варианта выхода)
Закройте браузер (пытается закрыть все вкладки, затем выйдите)
Однако, если вы STILL нарваться проблемы с висящими экземплярами (как я), вы можете также убить экземпляр. Для этого вам понадобится PID экземпляра chrome.
Если после этого останется хромированный экземпляр, я съем шляпу. :(
источник
Код Python:
источник
Я знаю, что это старый вопрос, но я подумал, что поделюсь тем, что сработало для меня. У меня были проблемы с Eclipse - он не убивал процессы, поэтому после тестирования кода с помощью Eclipse runner у меня оставалась куча фантомных процессов.
Моим решением было запустить Eclipse от имени администратора. Это исправило это для меня. Похоже, Windows не позволяла Eclipse закрывать порожденный им процесс.
источник
chromedriver.exe
остается видимым среди процессов диспетчера задач, независимо от того, запускаю я Eclipse как администратор или обычный пользователь. Возможно, что в моем случае это проблема, потому чтоchromedriver.exe
он 32-битный, а моя JRE - 64-битная. Eclipse Neon.1a (4.6.1), 64-разрядная версия Windows 8.1 Pro, Java 1.8.0_92-b14.Я использовал нижеприведенное в nightwatch.js в хуках afterEach.
.closeWindow () просто закрывает окно. (Но не работает для нескольких открытых окон). В то время как .end () завершает все оставшиеся процессы Chrome.
источник
У меня такая проблема. Я подозреваю, что это связано с версией Serenity BDD и Selenium. Процесс chromedriver никогда не запускается, пока не завершится весь набор тестов. Всего 97 тестов, но 97 процессов занимают память сервера, у которого мало ресурсов, что может повлиять на производительность.
Для решения этой проблемы я сделал 2 вещи (это относится к окнам).
перед каждым тестом (помеченным @Before) получите идентификатор процесса (PID) процесса хромированного драйвера с помощью:
после каждого теста (помеченного @After) убейте PID с помощью:
источник
Сначала я пришел сюда, думая, что на этот вопрос можно будет ответить / решить, но после прочтения всех ответов я был немного удивлен, что никто не попытался вызвать все три метода вместе:
Я был здесь только для того, чтобы искать ответы, и не собирался их давать. Таким образом, приведенное выше решение основано только на моем опыте. Я использовал драйвер Chrome в консольном приложении C # и смог очистить устаревшие процессы только после одновременного вызова всех трех методов.
источник
Для пользователей Ubuntu / Linux: - команда либо
pkill
илиkillall
.pkill
обычно рекомендуется, так как в некоторых системахkillall
фактически убивает все процессы.источник
Я использую транспортир с directConnect. Отключение параметра «--no-sandbox» устранило проблему для меня.
источник
Примечание: теперь, если мы видим диспетчер задач, вы не обнаружите, что какой-либо драйвер или процесс Chrome все еще висят.
источник
Я просмотрел все ответы и все их протестировал. Я в значительной степени собрал их все в один как «Защитное закрытие». Это в С #
ПРИМЕЧАНИЕ. Вы можете изменить параметр из приложения IModule на параметр реального драйвера.
источник
Наблюдается на версии 3.141.0:
Если вы инициализируете ChromeDriver только с помощью ChromeOptions, quit () не закроет chromedriver.exe.
Если вы создадите и передадите ChromeDriverService, quit () правильно закроет chromedriver.exe.
источник
Я просто использую в каждом тесте метод tearDown (), как показано ниже, и у меня нет никаких проблем.
После выхода из экземпляра драйвера очистите его из кеша с помощью driver = null
Надеюсь ответ на вопрос
источник
Есть еще один способ, который работает только для окон, но теперь он устарел. он работает для предыдущих выпусков селена (работает в версии 3.11.0).
источник
Вы должны подать заявку, прежде чем выйти
источник