Selenium anlayamadığım sorun

driver = webdriver.Firefox(executable_path=driver_path)

Bunu bi deneyin.

1 Beğeni

Sorun hala devam ediyor

@ibrahimcetin’in verdiği kodda aldığınız hata ne?

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"
1 Beğeni

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.

1 Beğeni

Ç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.

1 Beğeni

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)

1 Beğeni

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?

1 Beğeni

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.

1 Beğeni

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.

1 Beğeni

Hepinize teşekkür ederim ortada hiçbir neden yokken çalıştı :smiley: