Merhaba arkadaşlar ,
Kullanıcıdan aldığı kelimeyi çeviren bir uygulama yapıyorum. Kişi İngilizce-Türkçe mi yoksa Türkçe - İngilizce mi bunu seçiyor ardından ben siteden kelimeyi yazdırıp çevirisini almaya çalışıyorum. Ayrıca birden fazla kelime alma seçeneğini de ekledim ama şu an kelime sayısı 1 tane olan ve İngilizce-Türkçe şeçeneği ile uğraşıyorum. Fakat kelimeyi çevirdikten sonra kelimenin çevirisinin text ini alamıyorum. Yardımcı olursanız sevinirim. Teşekkürler.
Bu da kodlarım
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time as tm
askWhich = input("İngilizce-Türkçe mi ? (E/H) \t")
kelimeSayisi = input("Çevirmek istediğin kelimelerin sayısı birden fazla mı (E/H) \t")
askWhat = input("Çevirmek istediğiniz kelimeyi girin \t")
driver = webdriver.Firefox()
url = "https://translate.google.com/?hl=tr#view=home&op=translate&sl=tr&tl=en"
driver.get(url)
driver.maximize_window()
# İngilizceden Türkçeye
if askWhich=="E" or askWhich=="e":
# Kelime sayısı 1 tane olanlar
if kelimeSayisi == "H" or kelimeSayisi=="h":
degistir = driver.find_element_by_xpath("/html/body/div[2]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[3]")
degistir.click()
yaziYazma = driver.find_element_by_xpath("//*[@id='source']")
yaziYazma.send_keys(askWhat)
SORUN YAŞADIĞIM YER
sonuc = driver.find_element_by_css_selector(".tlid-translation translation span")
print(sonuc.text)
# Kelime sayısı birden fazla olanlar
elif kelimeSayisi=="E" or kelimeSayisi =="e":
pass
# Yanlış Değerler
else:
print("Yanlış değer girdiniz")
driver.close()
Sıkıntının sebebi çeviri sonucunun javascript ile dinamik olarak oluşturulması. Siz daha çeviri
sonucunu içeren element oluşturulmadan o elemeti bulmaya çalıştığınız için hata alıyorsunuz. Bu kod gerekli element gelene kadar bekliyor:
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
import time as tm
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
askWhich = input("İngilizce-Türkçe mi ? (E/H) \t")
kelimeSayisi = input("Çevirmek istediğin kelimelerin sayısı birden fazla mı (E/H) \t")
askWhat = input("Çevirmek istediğiniz kelimeyi girin \t")
driver = webdriver.Chrome()
tr_to_en_url = "https://translate.google.com/?hl=tr#view=home&op=translate&sl=tr&tl=en"
en_to_tr_url = "https://translate.google.com/?hl=tr#view=home&op=translate&sl=en&tl=tr"
driver.maximize_window()
# İngilizceden Türkçeye
if askWhich=="E" or askWhich=="e":
# Kelime sayısı 1 tane olanlar
if kelimeSayisi == "H" or kelimeSayisi=="h":
driver.get(en_to_tr_url)
## degistir = driver.find_element_by_xpath("/html/body/div[2]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[3]")
## degistir.click()
yaziYazma = driver.find_element_by_css_selector("#source")
yaziYazma.send_keys(askWhat)
try:
sonuc_parent = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, ".tlid-translation.translation")))
except:
print("Bağlantı sağlanamadı.")
sonuc = sonuc_parent.find_element_by_tag_name("span")
print(sonuc.text)
# Kelime sayısı birden fazla olanlar
elif kelimeSayisi=="E" or kelimeSayisi =="e":
pass
# Yanlış Değerler
else:
print("Yanlış değer girdiniz")
driver.close()
driver.quit()
Bir de çeviri için selenium kullanmak yavaş bir yöntem. Bu konudaki kütüphanelere göz atın: