Saya menyiapkan kode python untuk menjalankan Selenium chromedriver.exe
. Di akhir proses, saya harus browser.close()
menutup instance. ( browser = webdriver.Chrome()
) Saya yakin itu harus dilepaskan chromedriver.exe
dari memori (saya menggunakan Windows 7). Namun setelah setiap proses dijalankan, ada satu chromedriver.exe
contoh yang tersisa di memori. Saya harap ada cara saya bisa menulis sesuatu dengan python untuk menghentikan chromedriver.exe
proses. Jelas browser.close()
tidak berhasil. Terima kasih.
102
Jawaban:
per API Selenium, Anda benar-benar harus memanggil
browser.quit()
karena metode ini akan menutup semua jendela dan menghentikan proses. Anda tetap harus menggunakanbrowser.quit()
.Namun : Di tempat kerja saya, kami menemukan masalah besar saat mencoba menjalankan pengujian chromedriver di platform Java, di mana chromedriver.exe sebenarnya masih ada bahkan setelah digunakan
browser.quit()
. Untuk mengatasi ini, kami membuat file batch yang mirip dengan yang di bawah ini, yang hanya memaksa proses ditutup.kill_chromedriver.bat
Karena chromedriver.exe bukanlah program besar dan tidak menghabiskan banyak memori, Anda tidak perlu menjalankan ini setiap saat, tetapi hanya jika ada masalah. Misalnya saat menjalankan Project-> Clean in Eclipse.
sumber
quit
metode ini dengan benar , ini seharusnya tidak menjadi masalah. Membunuh paksa proses seharusnya hanya menjadi pilihan terakhir, dan jawaban Anda harus mencerminkan hal itu.X
masih tetap ada. itulah satu- satunya alasan untuk file batch ini. Jelasquit
adalah cara untuk pergi, namun dalam contoh saya, jika Anda men-debug dan menghentikan eksekusi - itu tidak pernah mencapaiquit
.I hope there is a way I can write something to kill the chromedriver.exe process.
. dan ya, itu bagus! Java tidak melakukan itubrowser.close()
hanya akan menutup jendela chrome saat ini.browser.quit()
harus menutup semua jendela yang terbuka, lalu keluar dari webdriver.sumber
browser.quit()
menutup semua jendela yang terbuka. Tapi chromedriver.exe tidak keluar. Dan ada pesan error 'InvalidURL: nonnumeric port:' port ''.browser = webdriver.Firefox()
. Keduanyabrowser.close()
danbrowser.quit()
akan menutup semua jendela dan melepaskan memori. Namun chromedriver tidak akan melakukan hal yang sama.Secara teoritis, memanggil browser.Quit akan menutup semua tab browser dan menghentikan proses.
Namun, dalam kasus saya, saya tidak dapat melakukan itu - karena saya menjalankan beberapa tes secara paralel, saya tidak ingin melakukan satu tes untuk menutup jendela ke yang lain. Oleh karena itu, ketika pengujian saya selesai berjalan, masih banyak proses "chromedriver.exe" yang masih berjalan.
Untuk mengatasinya, saya menulis kode pembersihan sederhana (C #):
sumber
Saya sukses saat menggunakan
driver.close()
sebelumnyadriver.quit()
. Saya sebelumnya hanya menggunakandriver.quit()
.sumber
sumber
Agak aneh tapi berhasil untuk saya. Saya mengalami masalah serupa, setelah beberapa penggalian saya menemukan bahwa masih ada tindakan UI yang terjadi di browser (memuat URL atau lebih), ketika saya menekan
WebDriver.Quit()
.Solusi bagi saya (walaupun sangat buruk) adalah menambahkan
Sleep()
3 detik sebelum memanggil Quit ().sumber
WebDriver.Quit()
sebelumnya, tetapi terkadang itu membiarkan satu proses chrome.exe hidup. Juga saya kira ini terjadi tidak pada semua sistem operasi.Jawaban ini adalah cara membuang driver dengan benar di C #
Jika Anda ingin menggunakan mekanisme 'yang tepat' yang harus digunakan untuk 'merapikan' setelah berjalan,
ChromeDriver
Anda harus menggunakanIWebDriver.Dispose();
Saya biasanya menerapkan
IDisposable
pada kelas yang berhubungan denganIWebDriver
dan gunakan seperti:
Semoga ini menghemat waktu Anda
sumber
using (var driver = new ChromeDriver()) { //my code here }
Terkadang, tidak selalu, "Sesuatu" (tidak tahu apa ??) terjadi danchromedriver.exe
masih belum dirilis menurut manajer tugas saya.Bunuh Banyak Proses Dari Baris Perintah Hal pertama yang perlu Anda lakukan adalah membuka prompt perintah, lalu gunakan perintah taskkill dengan sintaks berikut:
Parameter ini akan secara paksa menghentikan proses apa pun yang cocok dengan nama yang dapat dieksekusi yang Anda tentukan. Misalnya, untuk mematikan semua proses iexplore.exe, kami akan menggunakan:
sumber
Kode c #
menggunakan System.Diagnostics;
menggunakan System.Management;
dan fungsi ini
Panggilan
sumber
Saya memiliki masalah yang sama saat menjalankannya dengan Python dan saya harus menjalankan perintah 'killall' secara manual untuk mematikan semua proses. Namun ketika saya mengimplementasikan driver menggunakan protokol manajemen konteks Python , semua proses hilang. Tampaknya penerjemah Python melakukan pekerjaan yang sangat baik untuk membersihkan semuanya.
Berikut implementasinya:
Dan penggunaannya:
sumber
Jadi, Anda dapat menggunakan yang berikut ini:
Tutup browser (meniru menekan tombol tutup)
Keluar dari browser (meniru pemilihan opsi keluar)
Keluar dari browser (mencoba menutup setiap tab, lalu keluar)
Namun, jika Anda MASIH mengalami masalah dengan instans gantung (seperti sebelumnya), Anda mungkin juga ingin menghentikan instans tersebut. Untuk melakukannya, Anda memerlukan PID dari instance chrome.
Jika ada contoh krom tersisa setelah itu, saya akan makan topi saya. :(
sumber
Kode Python:
sumber
Saya tahu ini adalah pertanyaan lama, tetapi saya pikir saya akan membagikan apa yang berhasil untuk saya. Saya mengalami masalah dengan Eclipse - itu tidak akan mematikan proses, jadi saya memiliki banyak proses hantu berkeliaran setelah menguji kode menggunakan pelari Eclipse.
Solusi saya adalah menjalankan Eclipse sebagai administrator. Itu memperbaikinya untuk saya. Tampaknya Windows tidak mengizinkan Eclipse untuk menutup proses yang dimunculkannya.
sumber
chromedriver.exe
tetap terlihat di antara proses Task Manager tidak peduli saya memulai Eclipse sebagai administrator atau pengguna normal. Ada kemungkinan bahwa dalam kasus saya inilah masalahnya, karenachromedriver.exe
32 bit dan JRE saya 64 bit. Eclipse Neon.1a (4.6.1), Windows 8.1 Pro 64 bit, Java 1.8.0_92-b14.Saya telah menggunakan di bawah ini di nightwatch.js di hook afterEach.
.closeWindow () cukup menutup jendela. (Tapi tidak akan berfungsi untuk beberapa jendela yang dibuka). Sedangkan .end () mengakhiri semua proses chrome yang tersisa.
sumber
Saya memiliki masalah ini. Saya menduga ini karena versi Serenity BDD dan Selenium. Proses chromedriver tidak pernah dirilis hingga seluruh rangkaian pengujian selesai. Hanya ada 97 tes, tetapi memiliki 97 proses yang memakan memori server yang tidak memiliki banyak sumber daya dapat mempengaruhi kinerja.
Untuk mengatasi saya melakukan 2 hal (ini khusus untuk windows).
sebelum setiap pengujian (dianotasi dengan @Before) dapatkan id proses (PID) dari proses chromedriver dengan:
setelah setiap pengujian (dianotasi dengan @After), bunuh PID dengan:
sumber
Saya datang ke sini awalnya berpikir pasti ini akan dijawab / diselesaikan tetapi setelah membaca semua jawaban saya agak terkejut tidak ada yang mencoba memanggil ketiga metode bersama-sama:
Saya di sini hanya untuk mencari jawaban dan tidak bermaksud untuk memberikan jawaban. Jadi solusi di atas hanya berdasarkan pengalaman saya. Saya menggunakan driver chrome di aplikasi konsol C # dan saya dapat membersihkan proses yang tersisa hanya setelah memanggil ketiga metode secara bersamaan.
sumber
Untuk pengguna Ubuntu / Linux: - perintahnya adalah
pkill
ataukillall
.pkill
umumnya direkomendasikan, karena pada beberapa sistem,killall
sebenarnya akan mematikan semua proses.sumber
Saya menggunakan Protractor dengan directConnect. Menonaktifkan opsi "--tidak ada kotak pasir" memperbaiki masalah saya.
sumber
Catatan: Sekarang jika kami melihat pengelola tugas Anda tidak akan menemukan driver atau proses chrome yang masih menggantung
sumber
Saya telah melihat semua tanggapan dan menguji semuanya. Saya cukup banyak mengumpulkan semuanya menjadi satu sebagai 'Penutupan keamanan'. Ini di c #
CATATAN Anda dapat mengubah parameter dari aplikasi IModule ke yang dari driver sebenarnya.
sumber
Teramati pada versi 3.141.0:
Jika Anda menginisialisasi ChromeDriver hanya dengan ChromeOptions, berhenti () tidak akan menutup chromedriver.exe.
Jika Anda membuat dan meneruskan ChromeDriverService, berhenti () akan menutup chromedriver.exe dengan benar.
sumber
Saya hanya menggunakan dalam setiap tes metode tearDown () sebagai berikut dan saya tidak punya masalah sama sekali.
Setelah keluar dari instance driver, hapus dari cache oleh driver = null
Semoga jawaban pertanyaannya
sumber
Ada cara lain yang hanya berfungsi untuk windows, tetapi sekarang sudah usang. ini berfungsi untuk rilis selenium sebelumnya (berfungsi pada versi 3.11.0).
sumber
Anda harus mendaftar sebelum berhenti
sumber