I'm baru untuk pemrograman dan dimulai dengan Python
sekitar 2 bulan yang lalu dan saya akan lebih Sweigart's Mengotomatisasi Hal yang Membosankan dengan Python teks. I'm menggunakan MENGANGGUR dan sudah dipasang selenium modul dan browser Firefox.
Setiap kali saya mencoba untuk menjalankan webdriver fungsi, 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 untuk mengatur jalan untuk geckodriver
tetapi tidak yakin bagaimana, sehingga siapa pun dapat memberitahu saya bagaimana saya melakukan ini?
selenium.umum.pengecualian.WebDriverException: Pesan: 'geckodriver' eksekusi harus JALAN.
Sebenarnya Selenium klien binding mencoba untuk menemukan geckodriver
eksekusi dari sistem JALAN
. Anda akan perlu untuk menambahkan direktori yang berisi executable untuk sistem jalan.
export PATH=$PATH:/path/ke/direktori/dari/eksekusi/download/di/sebelumnya/langkah
Sekarang anda dapat menjalankan kode anda sama seperti anda're lakukan seperti di bawah ini :-
from selenium import webdriver
browser = webdriver.Firefox()
selenium.umum.pengecualian.WebDriverException: Pesan: Diharapkan browser biner lokasi, tetapi tidak dapat menemukan biner di lokasi default, tidak ada 'moz:firefoxOptions.biner' kemampuan yang ditawarkan, dan tidak ada biner bendera diatur pada baris perintah
Kecuali dengan jelas menyatakan anda telah menginstal firefox beberapa lokasi lain sementara Selenium adalah mencoba untuk menemukan firefox dan peluncuran dari lokasi default, tetapi itu tidak't menemukan. Anda perlu menyediakan secara eksplisit firefox diinstal biner lokasi untuk peluncuran firefox sebagai berikut :-
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
binary = FirefoxBinary('path/to/installed firefox binary')
browser = webdriver.Firefox(firefox_binary=binary)
langkah-langkah ini DISELESAIKAN selama saya di ubuntu firefox 50.
Download geckodriver
Copy geckodriver di /usr/local/bin
Anda TIDAK perlu menambahkan
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
firefox_capabilities['binary'] = '/usr/bin/firefox'
browser = webdriver.Firefox(capabilities=firefox_capabilities)
Jawaban oleh @saurabh memecahkan masalah, tapi doesn't menjelaskan mengapa Mengotomatisasi Hal yang Membosankan dengan Python doesn't mencakup langkah-langkah tersebut.
Hal ini disebabkan oleh pesan yang berdasarkan selenium 2.x dan Firefox driver untuk seri tersebut tidak perlu tokek driver. Gecko antarmuka untuk mengarahkan browser yang tidak tersedia ketika selenium sedang dikembangkan.
The versi terbaru dalam selenium 2.x series adalah 2.53.6 (lihat e.g ini jawaban, untuk lebih mudah lihat versi).
The 2.53.6 versi halaman doesn't menyebutkan tokek di semua. Tapi sejak versi 3.0.2 dokumentasi secara eksplisit serikat yang anda butuhkan untuk menginstal gecko driver.
Jika setelah upgrade (atau menginstal sistem baru), perangkat lunak yang bekerja dengan baik sebelum (atau pada sistem lama) doesn't bekerja lagi dan anda sedang terburu-buru, pin selenium versi anda virtualenv dengan melakukan
pip install selenium==2.53.6
tapi tentu saja solusi jangka panjang untuk pengembangan adalah untuk setup baru virtualenv dengan versi terbaru dari selenium, instal gecko driver dan menguji apakah semua masih bekerja seperti yang diharapkan. Tapi versi utama benjolan mungkin memperkenalkan perubahan API yang tidak tercakup oleh buku anda, sehingga anda mungkin ingin tetap dengan yang lebih tua selenium, sampai anda cukup percaya diri bahwa anda dapat memperbaiki setiap perbedaan antara selenium2 dan selenium3 API sendiri.
Untuk mengatur geckodriver untuk Selenium Python:
Perlu untuk mengatur geckodriver jalan dengan FirefoxDriver sebagai kode di bawah ini:
self.driver = webdriver.Firefox(executable_path = 'D:\Selenium_RiponAlWasim\geckodriver-v0.18.0-win64\geckodriver.exe')
Download geckodriver untuk OS yang cocok (dari https://github.com/mozilla/geckodriver/releases) -> Ekstrak di folder pilihan anda -> Set path dengan benar seperti yang disebutkan di atas
I'm menggunakan Python 3.6.2 dan Selenium WebDriver 3.4.3 di Windows 10.
Cara lain untuk mengatur geckodriver:
i) Hanya paste geckodriver.exe bawah /Python/Script/ (dalam kasus saya Di dalam folder itu: C:\Python36\Scripts)
ii) Sekarang tulislah kode sederhana seperti di bawah ini:
self.driver = webdriver.Firefox()
Solusi sederhana adalah untuk men-download GeckoDriver dan menambahkannya ke sistem JALAN. Anda dapat menggunakan salah satu dari dua pendekatan:
Download dan unzip Geckodriver.
Menyebutkan jalan saat memulai driver:
driver = webdriver.Firefox(executable_path='/your/path/to/geckodriver')
Download dan unzip Geckodriver.
Terbuka .bash_profile
. Jika anda belum't dibuat itu belum, anda dapat melakukannya dengan menggunakan perintah: touch ~/.bash_profile
. Kemudian buka menggunakan: open ~/.bash_profile
Mempertimbangkan GeckoDriver file ada di folder Download anda, anda dapat menambahkan baris berikut(s) ke .bash_profile
file:
PATH="/Users/<your-name>/Downloads/geckodriver:$PATH"
export PATH
Dengan ini, anda akan menambahkan path ke GeckoDriver untuk Sistem anda JALAN. Ini memberitahu sistem dimana GeckoDriver terletak ketika menjalankan anda Selenium script.
.bash_profile
dan memaksa untuk mengeksekusi. Ini memuat nilai-nilai segera tanpa harus reboot. Untuk melakukan ini, anda dapat menjalankan perintah berikut:source ~/.bash_profile
Ini juga harus bekerja untuk *nix varietas juga.
export GV=v0.26.0
wget "https://github.com/mozilla/geckodriver/releases/download/$GV/geckodriver-$GV-linux64.tar.gz"
tar xvzf geckodriver-$GV-linux64.tar.gz
chmod +x geckodriver
sudo cp geckodriver /usr/local/bin/
Untuk mac update ke:
geckodriver-$GV-macos.tar.gz
Cara termudah untuk windows!
Download versi terbaru dari geckodriver
dari di sini. Tambahkan geckodriver.exe file python direktori (atau direktori yang sudah di PATH
). Ini harus memecahkan masalah (Diuji pada Windows 10)
Beberapa masukan tambahan/klarifikasi untuk masa depan pembaca thread ini:
Berikut cukuplah sebagai resolusi untuk Windows 7, Python 3.6, selenium 3.11:
@dsalaj's note di thread ini sebelumnya untuk Unix ini berlaku untuk Windows juga; bermain-main dengan JALAN lingk. variabel di tingkat Windows dan restart sistem Windows dapat dihindari.
(1) Download geckodriver (seperti yang dijelaskan di thread ini sebelumnya) dan tempat (unzip) geckdriver.exe di X:\Folder\of\your\choice
(2) kode Python contoh:
import os;
os.environ["PATH"] += os.pathsep + r'X:\Folder\of\your\choice';
from selenium import webdriver;
browser = webdriver.Firefox();
browser.get('http://localhost:8000')
assert 'Django' in browser.title
Catatan: (1) Ini mungkin memakan waktu sekitar 10 detik untuk kode di atas untuk membuka browser Firefox untuk url yang ditentukan. (2) python console akan menunjukkan kesalahan berikut ini jika ada's tidak ada server telah berjalan pada url yang ditentukan atau yang melayani halaman dengan judul mengandung string 'Django': selenium.umum.pengecualian.WebDriverException: Pesan: Mencapai halaman error: about:neterror?e=connectionFailure&u=http%3A//localhost%3A8000/&c=UTF-8&f=regular&d=Firefox%20can%E2%80%9
I've benar-benar menemukan anda dapat menggunakan terbaru geckodriver dengan memasukkannya ke dalam sistem path. Saat ini saya'm 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
I'm menjalankan VirtualEnv (yang saya kelola menggunakan PyCharm, saya asumsikan menggunakan Pip untuk menginstal segala sesuatu)
Dalam kode berikut saya dapat menggunakan jalur tertentu untuk geckodriver menggunakan executable_path paramater (saya discoverd ini dengan memiliki melihat dalam Lib\site-packages\selenium\webdriver\firefox\webdriver.py ). Catatan saya memiliki kecurigaan bahwa urutan dari parameter argumen ketika memanggil webdriver penting, yang mengapa executable_path terakhir dalam kode saya (2nd last line off ke kanan)
Anda juga dapat melihat saya menggunakan custom Profil firefox untuk mendapatkan sekitar sec_error_unknown_issuer masalah yang anda akan berjalan ke jika situs anda're pengujian memiliki sertifikat tidak terpercaya. lihat https://stackoverflow.com/questions/16879566/how-to-disable-firefoxs-untrusted-connection-warning-using-selenium
Setelah penyelidikan ditemukan bahwa Marionette driver ini tidak lengkap dan masih dalam proses, dan tidak ada jumlah pengaturan berbagai kapasitas atau profil pilihan untuk menolak atau pengaturan certifcates akan bekerja. Jadi itu hanya lebih mudah untuk menggunakan profil kustom.
Pokoknya di sini's kode tentang bagaimana saya mendapat geckodriver untuk bekerja tanpa di jalan:
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
#you probably don't need the next 3 lines they don't seem to work anyway
firefox_capabilities['handleAlerts'] = True
firefox_capabilities['acceptSslCerts'] = True
firefox_capabilities['acceptInsecureCerts'] = True
#In the next line I'm using a specific FireFox profile because
# I wanted to get around the sec_error_unknown_issuer problems with the new Firefox and Marionette driver
# I create a FireFox profile where I had already made an exception for the site I'm testing
# see https://support.mozilla.org/en-US/kb/profile-manager-create-and-remove-firefox-profiles#w_starting-the-profile-manager
ffProfilePath = 'D:\Work\PyTestFramework\FirefoxSeleniumProfile'
profile = webdriver.FirefoxProfile(profile_directory=ffProfilePath)
geckoPath = 'D:\Work\PyTestFramework\geckodriver.exe'
browser = webdriver.Firefox(firefox_profile=profile, capabilities=firefox_capabilities, executable_path=geckoPath)
browser.get('http://stackoverflow.com')
I'm menggunakan Windows 10 dan ini bekerja untuk saya:
Selenium jawaban pertanyaan ini dalam DESKRIPSI mereka.rst
Drivers
=======
Selenium requires a driver to interface with the chosen browser. Firefox,
for example, requires `geckodriver <https://github.com/mozilla/geckodriver/releases>`_, which needs to be installed before the below examples can be run. Make sure it's in your `PATH`, e. g., place it in `/usr/bin` or `/usr/local/bin`.
Failure to observe this step will give you an error `selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
Pada dasarnya hanya men-download geckodriver, membongkar dan memindahkan eksekusi ke /usr/bin folder
It's benar-benar agak sedih bahwa tidak satupun dari buku-buku yang diterbitkan pada Selenium/Python dan sebagian besar komentar tentang masalah ini via Google tidak menjelaskan pathing logika untuk mengatur hal ini pada Mac (semuanya adalah Windows!!!!). Youtubes semua pickup di "setelah" anda've got pathing setup (dalam pikiran saya, murah jalan keluar!). Jadi, bagi anda yang termasuk pengguna Mac, gunakan perintah berikut untuk mengedit bash path file:
>$touch ~/.bash_profile; terbuka ~/.bash_profile
Kemudian tambahkan path sesuatu seperti ini.... *# Setting PATH untuk geckodriver PATH="/usr/bin/geckodriver:${PATH}" ekspor PATH
PATH="~/Users/yourNamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/selenium/webdriver/firefox/:${PATH}" ekspor PATH
PATH="/Users/yournamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/selenium/webdriver/common/service.py:${PATH}" ekspor PATH*
Ini bekerja untuk saya. Kekhawatiran saya adalah ketika akan Selenium Windows masyarakat mulai bermain permainan nyata dan termasuk kita pengguna Mac ke mereka sombong keanggotaan klub.
Untuk pengguna windows
gunakan kode asli sebagai it's:
from selenium import webdriver
browser = webdriver.Firefox()
driver.get("https://www.google.com")
kemudian men-download driver dari: mozilla/geckodriver
Tempat itu di jalan yang tetap (permanen).. sebagai contoh, saya taruh di:
C:\Python35
Kemudian pergi ke variabel lingkungan dari sistem, dalam grid "variabel Sistem" cari variabel Path dan tambahkan:
;C:\Python35\geckodriver
geckodriver, tidak geckodriver.exe.
Kunjungi Gecko Driver mendapatkan url untuk gecko driver dari bagian Download.
Clone repo ini https://github.com/jackton1/script_install.git
cd script_install
Menjalankan
./installer --gecko-driver https://github.com/mozilla/geckodriver/releases/download/v0.18.0/geckodriver-v0.25.0-linux64.tar.gz
Pada Raspberry Pi saya harus membuat dari LENGAN driver dan mengatur geckodriver dan login path di:
sudo nano /usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py
def __init__(self, firefox_profile=None, firefox_binary=None,
timeout=30, capabilities=None, proxy=None,
executable_path="/PATH/gecko/geckodriver",
firefox_options=None,
log_path="/PATH/geckodriver.log"):
Saya melihat diskusi masih berbicara tentang cara menyiapkan geckodriver dengan men-download biner dan mengkonfigurasi jalur secara manual.
Hal ini dapat dilakukan secara otomatis dengan menggunakan webdriver-manager
pip install webdriver-manager
Sekarang kode di atas pada pertanyaan akan bekerja hanya dengan di bawah perubahan,
from selenium import webdriver
from webdriver_manager.firefox import GeckoDriverManager
driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
Jika anda ingin menambahkan driver jalan di windows 10:
Klik pada "Advanced System Settings"
Klik pada "Variabel Lingkungan" di bagian bawah layar
Dalam "User Variables" menyoroti bagian "Path" dan klik "Edit"
Tambahkan jalur untuk variabel anda dengan mengklik "New" dan mengetik di jalan untuk driver anda menambahkan dan menekan enter.
Setelah anda selesai memasukkan di path, klik "OK"
Terus klik "OK" sampai anda telah menutup semua layar