driver = webdriver.Firefox(executable_path=driver_path)
Bunu bi deneyin.
driver = webdriver.Firefox(executable_path=driver_path)
Bunu bi deneyin.
Sorun hala devam ediyor
Traceback (most recent call last):
File "NYP.py", line 5, in <module>
driver = webdriver.Firefox(executable_path=driver_path)
File "/home/tuncay/.local/lib/python3.5/site-packages/selenium/webdriver/firefox/webdriver.py", line 164, in __init__
self.service.start()
File "/home/tuncay/.local/lib/python3.5/site-packages/selenium/webdriver/common/service.py", line 76, in start
stdin=PIPE)
File "/usr/lib/python3.5/subprocess.py", line 947, in __init__
restore_signals, start_new_session)
File "/usr/lib/python3.5/subprocess.py", line 1551, in _execute_child
raise child_exception_type(errno_num, err_msg)
OSError: [Errno 8] Exec format error
Linux exesi degil herhal. Driver’in dogrudan calistirilabilir olmasi gerekiyor diye hatirliyorum.
Resmi bir paketi yok muydu?
Burada biraz konuşulmuştu sanırım:
Burdan geckodriver linux.tar.gz yi indirmiştim
Sonda kullandığınız geckodriver
bir klasör mü yoksa dosyanın kendi ismi mi? Çünkü zip dosyasından çıkardığınız dosyanın ismi de geckodriver
ve uzantısı yok.Yani geckodriver
dosyasını geckodriver
isminde bir klasöre mi koydunuz yoksa sondaki geckodriver
dosya mı?
Diyelim aynı dizinde geckodriver
dosyası ve çalıştıracağınız python dosyası var. Adres kısmına tek bir nokta koymanız yeter.
driver = webdriver.Firefox(".")
Tavsiyem, geckodriver’ı /usr/bin
, gibi bir yere kopyalamanız. O zaman her defasında webdriver.Firefox(".")
gibi sürekli yol tanımlamak zorunda kalmazsınız.
Veya ev dizininde .bin
isminde bir tane klasör oluşturun, geckodriver
gibi her yerden erişilmesini istediğiniz dosyalarınızı buraya atın, sonra da komut satırına aşağıdaki kodu yazın.
export PATH="$HOME/.bin:$PATH"
geckodriver uzantısız bir dosya açamıyorum zaten
dediğim gibi geckodriver
'ın bulunduğu dizin için yukarıdaki komutu yazın, bir daha deneyin isterseniz. Yani .bin
ifadesi yerine dosya hangi dizindeyse o dizinin ismini verin.
Çalıştırılan py dosyası ile aynı konuma koydum ve
driver = webdriver.Firefox(".")
yaptım ve şu hatayı aldım
Traceback (most recent call last):
File "/home/tuncay/.local/lib/python3.5/site-packages/selenium/webdriver/common/service.py", line 76, in start
stdin=PIPE)
File "/usr/lib/python3.5/subprocess.py", line 947, in __init__
restore_signals, start_new_session)
File "/usr/lib/python3.5/subprocess.py", line 1551, in _execute_child
raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: 'geckodriver'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "Selenium.py", line 4, in <module>
driver = webdriver.Firefox(".")
File "/home/tuncay/.local/lib/python3.5/site-packages/selenium/webdriver/firefox/webdriver.py", line 164, in __init__
self.service.start()
File "/home/tuncay/.local/lib/python3.5/site-packages/selenium/webdriver/common/service.py", line 83, in start
os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
Peki geckodriver
'ı ~/.local/bin
dizinine atın. Sonra da driver = webdriver.Firefox(".")
satırındaki "."
karakterini kaldırın, driver = webdriver.Firefox()
haline getirin ve bir daha deneyin.
Bahsettiğiniz şeyleri bu videodakinlere benziyor ise yaptım ama şu hata oldu yine
Traceback (most recent call last):
File "Selenium.py", line 4, in <module>
driver = webdriver.Firefox()
File "/home/tuncay/.local/lib/python3.5/site-packages/selenium/webdriver/firefox/webdriver.py", line 164, in __init__
self.service.start()
File "/home/tuncay/.local/lib/python3.5/site-packages/selenium/webdriver/common/service.py", line 76, in start
stdin=PIPE)
File "/usr/lib/python3.5/subprocess.py", line 947, in __init__
restore_signals, start_new_session)
File "/usr/lib/python3.5/subprocess.py", line 1551, in _execute_child
raise child_exception_type(errno_num, err_msg)
OSError: [Errno 8] Exec format error
İşletim sisteminiz hakkında bilgi verir misiniz? (32bit, 64bit, versiyon falan)
Ubuntu 16.04 32 bit
Sorun 64 indirmem gibiymiş fakat 32 bit indirdiğimde ve denediğmde şu sorun oldu
Traceback (most recent call last):
File "Selenium.py", line 4, in <module>
driver = webdriver.Firefox(executable_path="/home/tuncay/Masaüstü/geckodriver/")
File "/home/tuncay/.local/lib/python3.5/site-packages/selenium/webdriver/firefox/webdriver.py", line 164, in __init__
self.service.start()
File "/home/tuncay/.local/lib/python3.5/site-packages/selenium/webdriver/common/service.py", line 76, in start
stdin=PIPE)
File "/usr/lib/python3.5/subprocess.py", line 947, in __init__
restore_signals, start_new_session)
File "/usr/lib/python3.5/subprocess.py", line 1551, in _execute_child
raise child_exception_type(errno_num, err_msg)
NotADirectoryError: [Errno 20] Not a directory
Bu ilk aldığınız hatayla aynı
driver = webdriver.Firefox(executable_path=driver_path)
Bu şekilde yazdığınıza emin misiniz?
Demekki 32 bit ile 64 bit arasında fark yok demektir
sistem 32 diye 32 bit olanını indirdim
kodlarıda burda ve geckodriver masaüstünde
from selenium import webdriver
import time
driver = webdriver.Firefox(executable_path="/home/tuncay/Masaüstü/geckodriver/")
time.sleep(5)
driver.quit()
Bulunan ama executable olmadigi icin calistirilamayan dosyanin konumuyla niye bu kadar ugrastiginizi anlayabilmis degilim.
Distronun resmi paketi demek istedim. Linklenen thread’de de bahsediliyor.
Sunu da denememis kimse anlasilan. Deneyip dosyanin calistirilabilir olup olmadigini gorseydiniz keske Python’a gostermeye ugrasmadan.
Başlarda aldığı hata dosyanın yolu ile alakalıydı. İndirdiği dosya executable. Dosyanın yolu bulunduktan sonra aldığı hata Exec format error
. Bu hata inen dosyanın executable olmadığı anlamına gelmiyor.
Aklıma gelen bir baska ihtimal, muhtemelen indirilen geckodriver sürümünün, yüklü olan mozilla sürümüyle uyuşmuyor olabileceği.
Mesela v0.26.0 için şöyle bir ifade var.
Note that with this release the minimum recommended Firefox version
has changed to Firefox ≥60.
Hepinize teşekkür ederim ortada hiçbir neden yokken çalıştı