Saya baru Python
mengenal pemrograman dan mulai sekitar 2 bulan yang lalu dan saya mempelajari Sweigart's Automate the Boring Stuff dengan Python text. Saya menggunakan IDLE dan sudah menginstal modul selenium dan browser Firefox. Setiap kali saya mencoba menjalankan fungsi webdriver, saya mendapatkan ini:
from selenium import webdriver
browser = webdriver.Firefox()
Pengecualian: -
Exception ignored in: <bound method Service.__del__ of <selenium.webdriver.firefox.service.Service object at 0x00000249C0DA1080>>
Traceback (most recent call last):
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 163, in __del__
self.stop()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 135, in stop
if self.process is None:
AttributeError: 'Service' object has no attribute 'process'
Exception ignored in: <bound method Service.__del__ of <selenium.webdriver.firefox.service.Service object at 0x00000249C0E08128>>
Traceback (most recent call last):
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 163, in __del__
self.stop()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 135, in stop
if self.process is None:
AttributeError: 'Service' object has no attribute 'process'
Traceback (most recent call last):
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 64, in start
stdout=self.log_file, stderr=self.log_file)
File "C:\Python\Python35\lib\subprocess.py", line 947, in __init__
restore_signals, start_new_session)
File "C:\Python\Python35\lib\subprocess.py", line 1224, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
browser = webdriver.Firefox()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 135, in __init__
self.service.start()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 71, in start
os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
Saya pikir saya perlu menetapkan jalur untuk geckodriver
tetapi tidak yakin bagaimana, jadi adakah yang bisa memberitahu saya bagaimana saya melakukan ini?
brew install geckodriver
chromedriver
untuk ini.Jawaban:
Pertama-tama Anda harus mengunduh geckodriver yang dapat dieksekusi terbaru dari sini untuk menjalankan firefox terbaru menggunakan selenium
Sebenarnya binding klien Selenium mencoba untuk menemukan
geckodriver
executable dari sistemPATH
. Anda perlu menambahkan direktori yang berisi executable ke jalur sistem.Pada sistem Unix Anda dapat melakukan hal berikut untuk menambahkannya ke jalur pencarian sistem Anda, jika Anda menggunakan shell yang kompatibel dengan bash:
Pada Windows Anda perlu memperbarui variabel sistem Path untuk menambahkan path direktori lengkap ke geckodriver yang dapat dieksekusi secara manual atau baris perintah (jangan lupa untuk me-restart sistem Anda setelah menambahkan geckodriver yang dapat dieksekusi ke dalam sistem PATH agar berlaku) . Prinsipnya sama dengan di Unix.
Sekarang Anda dapat menjalankan kode Anda sama seperti yang Anda lakukan seperti di bawah ini: -
Pengecualian dengan jelas menyatakan Anda telah menginstal firefox di beberapa lokasi lain sementara Selenium mencoba menemukan firefox dan meluncurkan dari lokasi default tetapi tidak dapat menemukannya. Anda perlu memberikan lokasi biner yang diinstal firefox secara eksplisit untuk meluncurkan firefox seperti di bawah ini: -
sumber
geckodriver.exe
padaC:\Python\Python35\selenium
direktori dan saya menetapkan jalan seperti yang Anda jelaskan tetapi itu memberi saya kesalahan di bawah ini:PATH
di lingkungan unix. Anda dapat mengaturnya dalam kode karena Anda tidak memerlukannya dengan sistem yang luas:os.environ["PATH"] += os.pathsep + 'path/to/dir/containing/geckodriver/'
Atau cukup simpan binari geckodriver di direktori yang sudah ada di jalur Anda:mv geckodriver /usr/local/bin
Ini menyelesaikannya untuk saya.
sumber
export PATH=$PATH:geckodriver
(itu diekstraksi di Desktop). Tapi itu tidak membantu. Saya masih mendapatkan OSError [errno 8]langkah ini ASKU bagi saya di ubuntu firefox 50.
Unduh geckodriver
Salin geckodriver di / usr / local / bin
Anda TIDAK perlu menambahkan
sumber
Jawaban oleh @saurabh memecahkan masalah, tetapi tidak menjelaskan mengapa Mengotomatiskan Hal-hal yang Membosankan dengan Python tidak termasuk langkah-langkah itu.
Ini disebabkan oleh buku yang didasarkan pada selenium 2.x dan driver Firefox untuk seri itu tidak memerlukan driver tokek. Antarmuka Gecko untuk mengarahkan browser tidak tersedia saat selenium sedang dikembangkan.
Versi terbaru dalam seri selenium 2.x adalah 2.53.6 (lihat mis. Jawaban ini , untuk tampilan versi yang lebih mudah).
The halaman versi 2.53.6 tidak menyebutkan gecko sama sekali. Tetapi karena versi 3.0.2 dokumentasi secara eksplisit menyatakan Anda perlu menginstal driver gecko.
Jika setelah peningkatan (atau menginstal pada sistem baru), perangkat lunak Anda yang berfungsi dengan baik sebelumnya (atau pada sistem lama Anda) tidak berfungsi lagi dan Anda sedang terburu-buru, sematkan versi selenium di virtualenv Anda dengan melakukan
tetapi tentu saja solusi jangka panjang untuk pengembangan adalah menyiapkan virtualenv baru dengan versi selenium terbaru, menginstal driver tokek dan menguji apakah semuanya masih berfungsi seperti yang diharapkan. Namun, versi besar bump mungkin memperkenalkan perubahan API lain yang tidak dicakup oleh buku Anda, jadi Anda mungkin ingin tetap menggunakan selenium yang lebih lama, sampai Anda cukup yakin bahwa Anda dapat memperbaiki sendiri perbedaan antara API selenium2 dan selenium3 sendiri.
sumber
Pada macOS dengan Homebrew sudah terinstal, Anda cukup menjalankan perintah Terminal
Karena homebrew telah memperluas
PATH
, tidak perlu memodifikasi skrip startup apa pun.sumber
Untuk mengatur geckodriver untuk Selenium Python:
Perlu mengatur jalur geckodriver dengan FirefoxDriver seperti kode di bawah ini:
Unduh geckodriver untuk OS yang cocok Anda (dari https://github.com/mozilla/geckodriver/releases ) -> Ekstrak di folder pilihan Anda -> Atur jalur dengan benar seperti disebutkan di atas
Saya menggunakan Python 3.6.2 dan Selenium WebDriver 3.4.3 di Windows 10.
Cara lain untuk menyiapkan tokekriver:
i) Cukup tempel geckodriver.exe di bawah / Python / Scripts / (Dalam kasus saya foldernya adalah: C: \ Python36 \ Scripts)
ii) Sekarang tulis kode sederhana seperti di bawah ini:
sumber
Jika Anda menggunakan Anaconda , yang harus Anda lakukan adalah mengaktifkan lingkungan virtual Anda dan kemudian menginstal geckodriver menggunakan perintah berikut :
sumber
Ubuntu 18.04+ dan rilis terbaru dari tokekriver
Ini juga harus bekerja untuk varietas * nix lainnya.
Untuk pembaruan mac ke:
sumber
Saya melihat diskusi masih berbicara tentang cara lama menyiapkan geckodriver dengan mengunduh biner dan mengkonfigurasi path secara manual.
Ini dapat dilakukan secara otomatis menggunakan pengelola-web
Sekarang kode di atas dalam pertanyaan akan bekerja cukup dengan perubahan di bawah ini,
sumber
Cara termudah untuk windows!
Unduh versi terbaru
geckodriver
dari sini . Tambahkan file geckodriver.exe ke direktori python (atau direktori lain yang sudah adaPATH
). Ini harus menyelesaikan masalah (Diuji pada Windows 10)sumber
Langkah-langkah untuk MAC:
Solusi sederhana adalah mengunduh GeckoDriver dan menambahkannya ke PATH sistem Anda. Anda dapat menggunakan salah satu dari dua pendekatan ini:
Metode Pendek:
1) Unduh dan hapus zip Geckodriver .
2) Sebutkan jalur saat memulai pengemudi:
Metode panjang:
1) Unduh dan hapus zip Geckodriver .
2) Buka
.bash_profile
. Jika Anda belum membuat itu belum, Anda dapat melakukannya dengan menggunakan perintah:touch ~/.bash_profile
. Kemudian buka menggunakan:open ~/.bash_profile
3) Mengingat file GeckoDriver ada di folder Unduhan Anda, Anda dapat menambahkan baris berikut ke
.bash_profile
file:Dengan ini Anda menambahkan path ke GeckoDriver ke System PATH Anda. Ini memberi tahu sistem tempat GeckoDriver berada saat menjalankan skrip Selenium Anda.
4) Simpan
.bash_profile
dan paksa untuk mengeksekusi. Ini memuat nilai segera tanpa harus reboot. Untuk melakukan ini, Anda dapat menjalankan perintah berikut:source ~/.bash_profile
5) Itu dia. Kamu selesai!. Anda dapat menjalankan skrip Python sekarang.
sumber
geckodriver
dengan Homebrew:brew install geckodriver
dan kemudian memulai Firefox melalui:driver = webdriver.Firefox(executable_path="/usr/local/bin/geckodriver")
Beberapa masukan / klarifikasi tambahan untuk pembaca masa depan dari utas ini:
Berikut ini cukup sebagai resolusi untuk Windows 7, Python 3.6, selenium 3.11:
Catatan @ dsalaj di utas ini sebelumnya untuk Unix juga berlaku untuk Windows; bermain-main dengan PATH env. variabel di tingkat Windows dan restart sistem Windows dapat dihindari.
(1) Unduh geckodriver (seperti yang dijelaskan di utas ini sebelumnya) dan tempatkan geckdriver.exe (yang tidak di-zip) di X: \ Folder \ of \ your \ choice
(2) Contoh kode python:
Catatan: (1) Diperlukan sekitar 10 detik untuk kode di atas untuk membuka browser Firefox untuk url yang ditentukan.
(2) Konsol python akan menampilkan kesalahan berikut jika tidak ada server yang sudah berjalan di url yang ditentukan atau melayani halaman dengan judul yang berisi string 'Django': selenium.common.exceptions.WebDriverException: Pesan: Reached error page: about : neterror? e = connectionFailure & u = http% 3A // localhost% 3A8000 / & c = UTF-8 & f = reguler & d = Firefox% 20dapat% E2% 80% 9
sumber
Saya benar-benar menemukan Anda dapat menggunakan geckodriver terbaru tanpa meletakkannya di jalur sistem. Saat ini saya menggunakan
https://github.com/mozilla/geckodriver/releases/download/v0.12.0/geckodriver-v0.12.0-win64.zip
Firefox 50.1.0
Python 3.5.2
Selenium 3.0.2
Windows 10
Saya menjalankan VirtualEnv (yang saya kelola menggunakan PyCharm, saya asumsikan menggunakan Pip untuk menginstal semuanya)
Dalam kode berikut ini saya dapat menggunakan jalur khusus untuk geckodriver menggunakan parameter executable_path (saya menemukan ini dengan melihat di Lib \ situs-paket \ selenium \ webdriver \ firefox \ webdriver.py). Catatan Saya memiliki kecurigaan bahwa urutan argumen parameter saat memanggil webdriver adalah penting, itulah sebabnya executable_path terakhir dalam kode saya (baris terakhir ke-2 ke paling kanan)
Anda juga dapat memperhatikan bahwa saya menggunakan Profil firefox khusus untuk mengatasi masalah sec_error_unknown_issuer yang akan Anda hadapi jika situs yang Anda uji memiliki sertifikat yang tidak dipercaya. lihat Cara menonaktifkan peringatan koneksi tidak tepercaya Firefox menggunakan Selenium?
Setelah penyelidikan ditemukan bahwa driver Marionette tidak lengkap dan masih dalam proses, dan tidak ada pengaturan sejumlah kemampuan atau opsi profil untuk memberhentikan atau menetapkan sertifikat yang akan berfungsi. Jadi lebih mudah menggunakan profil khusus.
Bagaimanapun, inilah kode tentang bagaimana saya membuat geckodriver bekerja tanpa berada di jalur:
sumber
Saya menggunakan Windows 10 dan ini bekerja untuk saya:
sumber
Pertimbangkan untuk menginstal Firefox yang dikemas dalam kontainer:
Terhubung menggunakan
webdriver.Remote
:sumber
Sangat menyedihkan bahwa tidak ada buku yang diterbitkan di Selenium / Python dan sebagian besar komentar tentang masalah ini melalui Google tidak menjelaskan dengan jelas logika pathing untuk mengatur ini di Mac (semuanya Windows !!!!). Youtubes semua pickup di "setelah" Anda punya pengaturan pathing (dalam pikiran saya, jalan keluar murah!). Jadi, bagi Anda pengguna Mac yang hebat, gunakan yang berikut ini untuk mengedit file bash path Anda:
> $ touch ~ / .bash_profile; buka ~ / .bash_profile
Kemudian tambahkan path seperti ini .... * # Mengatur PATH untuk geckodriver PATH = "/ usr / bin / geckodriver: $ {PATH}" export PATH
Mengatur PATH untuk Selenium firefox
PATH = "~ / Pengguna / namaAndaPATH / VEnvPythonInterpreter / lib / python2.7 / paket-situs / selenium / webdriver / firefox /: $ {PATH}" export PATH
Mengatur PATH untuk dieksekusi pada driver firefox
PATH = "/ Pengguna / namamuPATH / VEnvPythonInterpreter / lib / python2.7 / paket-situs / selenium / webdriver / common / service.py: $ {PATH}" export PATH *
Ini berhasil untuk saya. Kekhawatiran saya adalah kapan komunitas Selenium Windows akan mulai memainkan game asli dan memasukkan kita pengguna Mac ke dalam keanggotaan klub sombong mereka.
sumber
Selenium menjawab pertanyaan ini dalam DESCRIPTION.rst mereka
Pada dasarnya, unduh saja tokekriver, buka paketnya dan pindahkan executable ke folder / usr / bin Anda
sumber
gunakan kode asli seperti itu:
kemudian unduh driver dari: mozilla / geckodriver
Tempatkan di jalur tetap (secara permanen) .. sebagai contoh, saya letakkan di:
Lalu pergi ke variabel lingkungan sistem, di grid "Sistem variabel" mencari variabel Path dan tambahkan:
geckodriver, bukan geckodriver.exe .
sumber
Pada Raspberry Pi saya harus membuat dari driver ARM dan mengatur geckodriver dan log path di:
sudo nano /usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py
sumber
Jika Anda menggunakan lingkungan virtual dan win10 (mungkin itu untuk sistem lain), Anda hanya perlu memasukkan geckodriver.exe ke folder berikut di direktori lingkungan virtual Anda:
... \ my_virtual_env_directory \ Scripts \ geckodriver.exe
sumber
ini akan memberi Anda jalan ke gekodriver.exe Anda di windows
sumber
Mac 10.12.1 python 2.7.10 ini bekerja untuk saya :)
sumber
Saya menggunakan Windows 10 dan Anaconda2. Saya mencoba mengatur variabel jalur sistem tetapi tidak berhasil. Kemudian saya cukup menambahkan file geckodriver.exe ke folder Anaconda2 / Scripts dan semuanya berfungsi dengan baik sekarang. Bagi saya jalannya adalah: -
C: \ Users \ Bhavya \ Anaconda2 \ Scripts
sumber
Jika Anda ingin menambahkan jalur driver di windows 10:
Klik kanan pada ikon "This PC" dan pilih "Properties"
Klik pada "Pengaturan Sistem Lanjutan"
sumber
Kunjungi Driver Tokek dapatkan url untuk driver tokek dari bagian Unduhan.
Kloning repo ini https://github.com/jackton1/script_install.git
cd script_install
Lari
sumber
sumber
bagi saya itu cukup dengan menginstal geckodriver di lingkungan yang sama:
dan kode itu tidak berubah:
sumber
Untuk menambahkan 5 sen saya, juga dimungkinkan untuk melakukan
echo PATH
(Linux) dan hanya memindahkan geckodriver ke folder yang Anda sukai. Jika folder sistem (bukan lingkungan virtual) adalah target, driver menjadi dapat diakses secara global.sumber