Çözüldü AttributeError: 'WebDriver' object has no attribute 'find_element_by_xpath'

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

kkank

Hectopat
Katılım
1 Mart 2021
Mesajlar
803
Makaleler
7
Çözümler
4
Daha fazla  
Cinsiyet
Erkek
İyi sosyaller herkese. Python'da çok yeniyim ve kurcalamaya çalışıyorum. Aşağıdaki kodu çalıştırdığım zaman tarayıcı açılıyor, bilgileri girmeden kapanıyor ve başlıktaki hatayı alıyorum. Ne yapmam lazım?



Kod:
from instagramuserinfo import email, password
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from selenium.webdriver.common.by import By


class Instagram:
    def __init__(self,email,password):
        self.browser=webdriver.Chrome()
        self.email=email
        self.password=password
    def signIn(self):
        self.browser.get("https://www.instagram.com")
        time.sleep(3)
        emailInput=self.browser.find_element_by_xpath("//*[@id='loginForm']/div/div[1]/div/label/input")
        passwordInput=self.browser.find_element_by_xpath("//*[@id='loginForm']/div/div[2]/div/label/input")

        emailInput.send_keys(self.email)
        passwordInput.send_keys(self.password)
        passwordInput.send_keys(Keys.ENTER)
        time.sleep(5)


instgrm = Instagram(email, password)
instgrm.signIn()
 
Çözüm
İlk satırı da ekleyince çalıştı ancak aynı yerde aynı hatayı veriyor. Büyük bir salaklık yapmış olma ihtimalim varmış gibi geliyor. Zira find_element yazarken find_element_by_xpath bu kısmı önermiyor bile. Yüklemem gereken eksik bir paket vs olabilir mi?
Şimdi internetten bir araştırma yaptım.
find_element_by_xpath
Bu kullanım kaldırılmış. Bendeki de eski sürüm olduğu için çalışmış. Aşağıya güncellenmiş kodu yerleştirdim.

Python:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from instagramuserinfo import email, password
import time

class Instagram:
    def __init__(self, email, password):
        self.browser = webdriver.Chrome()
        self.email = email
        self.password = password

    def signIn(self):
        self.browser.get("https://www.instagram.com")
        time.sleep(3)
        emailInput = self.browser.find_element(By.XPATH, "//*[@id='loginForm']/div/div[1]/div/label/input") # burayı düzenledim
        passwordInput = self.browser.find_element(By.XPATH, "//*[@id='loginForm']/div/div[2]/div/label/input") # burayı düzenledim

        emailInput.send_keys(self.email)
        passwordInput.send_keys(self.password)
        passwordInput.send_keys(Keys.ENTER)
        time.sleep(5)

instgrm = Instagram(email, password)
instgrm.signIn()

Bu şekilde çalışması gerekiyor.
find_element_by_xpath, webbrowser nesnesini kullanamıyor.

Python:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

class Instagram:
    def __init__(self, email, password):
        self.browser = webdriver.Chrome()
        self.email = email
        self.password = password

    def signIn(self):
        self.browser.get("https://www.instagram.com")
        time.sleep(3)
        emailInput = self.browser.find_element_by_xpath("//*[@id='loginForm']/div/div[1]/div/label/input") # burayı düzenledim
        passwordInput = self.browser.find_element_by_xpath("//*[@id='loginForm']/div/div[2]/div/label/input") # burayı düzenledim

        emailInput.send_keys(self.email)
        passwordInput.send_keys(self.password)
        passwordInput.send_keys(Keys.ENTER)
        time.sleep(5)

instgrm = Instagram(email, password)
instgrm.signIn()

Bu düzeltilmiş kodu bir deneyin bakalım. Bende çalışıyor. Eğer yine hata verirse, modül kurulumunda bir sorun olabilir.
 
Son düzenleyen: Moderatör:
Bu düzeltilmiş kodu bir deneyin bakalım. Bende çalışıyor. Eğer yine hata verirse, modül kurulumunda bir sorun olabilir.
İlk satırı da ekleyince çalıştı ancak aynı yerde aynı hatayı veriyor. Büyük bir salaklık yapmış olma ihtimalim varmış gibi geliyor. Zira find_element yazarken find_element_by_xpath bu kısmı önermiyor bile. Yüklemem gereken eksik bir paket vs olabilir mi?
 
İlk satırı da ekleyince çalıştı ancak aynı yerde aynı hatayı veriyor. Büyük bir salaklık yapmış olma ihtimalim varmış gibi geliyor. Zira find_element yazarken find_element_by_xpath bu kısmı önermiyor bile. Yüklemem gereken eksik bir paket vs olabilir mi?
Şimdi internetten bir araştırma yaptım.
find_element_by_xpath
Bu kullanım kaldırılmış. Bendeki de eski sürüm olduğu için çalışmış. Aşağıya güncellenmiş kodu yerleştirdim.

Python:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from instagramuserinfo import email, password
import time

class Instagram:
    def __init__(self, email, password):
        self.browser = webdriver.Chrome()
        self.email = email
        self.password = password

    def signIn(self):
        self.browser.get("https://www.instagram.com")
        time.sleep(3)
        emailInput = self.browser.find_element(By.XPATH, "//*[@id='loginForm']/div/div[1]/div/label/input") # burayı düzenledim
        passwordInput = self.browser.find_element(By.XPATH, "//*[@id='loginForm']/div/div[2]/div/label/input") # burayı düzenledim

        emailInput.send_keys(self.email)
        passwordInput.send_keys(self.password)
        passwordInput.send_keys(Keys.ENTER)
        time.sleep(5)

instgrm = Instagram(email, password)
instgrm.signIn()

Bu şekilde çalışması gerekiyor.
 
Son düzenleme:
Çözüm
Şimdi internetten bir araştırma yaptım.

Bu kullanım kaldırılmış. Bendeki de eski sürüm olduğu için çalışmış. Aşağıya güncellenmiş kodu yerleştirdim.

Bu şekilde çalışması gerekiyor.
Yine başına şunu:
from instagramuserinfo import email, password
ekledim. Sonrasında by hatası verdi. Aşağıdaki kısmı ekledim:
from selenium.webdriver.common.by import By

Şimdi çalıştı hocam çok teşekkür ederim.
 
Böyle kütüphanelerde çalışırken ChatGPT kullanılmamalı, sırf bu yüzden.

Sanırım halüsinasyondan beter eski bir kod yazması. Daha insan bile güncel veriyi bulmakta zorlanıyorken hem de.

Böyle sorunlarda kütüphanenin Github reposunda issue aratmak güncel ve net sonuç almanıza yardımcı olur.
 
Böyle kütüphanelerde çalışırken ChatGPT kullanılmamalı, sırf bu yüzden.

Sanırım halüsinasyondan beter eski bir kod yazması. Daha insan bile güncel veriyi bulmakta zorlanıyorken hem de.

Böyle sorunlarda kütüphanenin Github reposunda issue aratmak güncel ve net sonuç almanıza yardımcı olur.
Aslında bir eğitim serisinden öğrenmeye çalışıyorum ve meğer birkaç yıl öncesine aitmiş. Ancak bu kadar yaygın ve popüler bir dilin bu seviyede temel talimatları değiştirmesi olmaması gereken birşey bence.
 
Aslında bir eğitim serisinden öğrenmeye çalışıyorum ve meğer birkaç yıl öncesine aitmiş. Ancak bu kadar yaygın ve popüler bir dilin bu seviyede temel talimatları değiştirmesi olmaması gereken birşey bence.
Dillik bir şey yok, kullandığınız kütüphaneyi geliştirenler farklı kişiler.

Önce deprecate edilir, kullananlara uzun süre "kardeşim güncelle, bak kaldıracağız" uyarısı gösterilir. Ardından kaldırılır. İşin üslubu bu aslında.

Güncel yerlerden eğitim almak veya eğitim alınan yerin kütüphane sürümü belirtmesi çok önemli.

Bana sorarsanız eski halinin yerine bir şey koymadıkları sürece, ki halen boş, bir uyarı mesajı ile durumu anlatabilirlerdi. Yapmamışlar.
 

Technopat Haberler

Geri
Yukarı