Düzgün çalışan program arada hata veriyor!

Arkadaşlar tamamladığım programı test etmek için çalıştırdığımda bazen sorunsuz çalışırken çoğunlukla bu hata ile karşılaşıyorum ve program durduruluyor.
aşağıdaki hatayı veriyor. aklıma farkında olmadan internet bağlantısının kopup geri gelmesi durumu olurmu diye düşündüm ama hata kodlarınıda algılayamadım yardımcı olma imkanınız varmı…

====== WebDriver manager ======
Current google-chrome version is 91.0.4472
Get LATEST driver version for 91.0.4472
Driver [C:\Users\hcagl.wdm\drivers\chromedriver\win32\91.0.4472.101\chromedriver.exe] found in cache

DevTools listening on ws://127.0.0.1:58657/devtools/browser/c07ae3d1-992b-4a8c-aef8-d751efc67b90
[10864:11972:0703/221804.188:ERROR:device_event_log_impl.cc(214)] [22:18:04.188] USB: usb_service_win.cc:389 Could not read device interface GUIDs: Sistem belirtilen dosyay² bulam²yor. (0x2)
[10864:11972:0703/221804.194:ERROR:device_event_log_impl.cc(214)] [22:18:04.193] Bluetooth: bluetooth_adapter_winrt.cc:1072 Getting Default Adapter failed.
[10864:11972:0703/221804.201:ERROR:device_event_log_impl.cc(214)] [22:18:04.201] USB: usb_device_handle_win.cc:1058 Failed to read descriptor from node connection: Sisteme ba­l² bir ayg²t al²■m²yor. (0x1F)
Traceback (most recent call last):
File “TUIK.py”, line 55, in
File “selenium\webdriver\remote\webdriver.py”, line 394, in find_element_by_xpath
File “selenium\webdriver\remote\webdriver.py”, line 976, in find_element
File “selenium\webdriver\remote\webdriver.py”, line 321, in execute
File “selenium\webdriver\remote\errorhandler.py”, line 242, in check_response
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {“method”:“xpath”,“selector”:"/html/body/div/div/div/div/table[2]/tbody/tr[1]/td/div[1]/div[2]/table/tbody/tr/td[1]/select/option[2]"}
(Session info: chrome=91.0.4472.124)

[16888] Failed to execute script TUIK
[11156:13064:0703/221823.674:ERROR:ssl_client_socket_impl.cc(980)] handshake failed; returned -1, SSL error code 1, net_error -101

XPath’ini belirtmiş olduğunuz şeyi bulamadığını belirtmiş. Ben de Selenium kullanırken çok sık karşılaşıyordum. Bazı işlemlerin arasına time modülünu kullanarak gecikme ekleyince sorun genelde çözülüyordu. Eğer sorun çözülmüyorsa XPath’i güncellemek gerekir.

import time

time.sleep(x)  # x kadar saniye bekler

Örneğin bir butona bastıktan sonra veriler yükleniyorsa, butona bastıktan hemen sonra değil de 1-2 saniyelik gecikmeden sonra verileri çekmek daha sağlıklı olacaktır.

Veya while döngüsüyle birlikte try, except kullanarak da veri alınana dek / butona basılana dek beklenebilir diye düsünmekteyim.

1 Beğeni

hocam dediğiniz durum zaten mevcut. normalde çalışyıor. internet hızıyla yada bağlantı kopması ile alakalı olabilrmi… exe ye çevirince bu hata daha fazla geliyor ama pycharm dan çalıştırınca daha az oluyor sorun…

from selenium import webdriver
import time
from webdriver_manager.chrome import ChromeDriverManager
T = 1 # BROWSER SAYFA BEKLEME SÜRESİ

# *********************************    SAYFANIN YÜKLENMESİ    *********************************
browser = webdriver.Chrome(ChromeDriverManager().install())
url = "https://biruni.tuik.gov.tr/nufusmenuapp/menu.zul"
browser.get(url)
# *********************************    SAYFANIN YÜKLENMESİ    *********************************
# *********************************    SEÇİM YILININ BELİRLENMESİ    *********************************
time.sleep(T)
browser.refresh()
time.sleep(T)
NUFUS_YILI_SECIM = browser.find_element_by_xpath("/html/body/div/div/div/div/div[2]/div/table/tbody/tr[1]/td/span").click()
# *********************************    SEÇİM YILININ BELİRLENMESİ    *********************************
# *********************************    İDARİ BİRİM SEÇİMİ   *********************************
time.sleep(T)
IDARI_BIRIM_SECIM = browser.find_element_by_xpath("/html/body/div/div/div/div/table[2]/tbody/tr[1]/td/div[1]/div[2]/table/tbody/tr/td[1]/select/option[2]").click()
time.sleep(T)
IDARI_BIRIM_SECIM_a = browser.find_element_by_xpath("/html/body/div/div/div/div/table[2]/tbody/tr[1]/td/div[1]/div[2]/table/tbody/tr/td[1]/select/option[1]").click()

# *********************************    İDARİ BİRİM SEÇİMİ    *********************************

# *********************************    LIST BOX İÇERİK ADETİNİ BULMA    *********************************
time.sleep(T)
IL_LISTE_KUTUSU = browser.find_element_by_xpath("/html/body/div/div/div/div/table[2]/tbody/tr[1]/td/div[1]/div[2]/table/tbody/tr/td[2]/select")
IL_LISTE = IL_LISTE_KUTUSU.text.splitlines()
del IL_LISTE[0]
IL_SAYISI = len(IL_LISTE)
browser.quit()
# *********************************    LIST BOX İÇERİK ADETİNİ BULMA    *********************************
print("1 buraya kadar başarılı")

# *********************************    İL İL VERİ İNDİRME DÖNGÜSÜ    ********************************************************************
SAYI_INT = 2

while 0 < IL_SAYISI :
    print("2 buraya kadar başarılı")
    SAYI = str(SAYI_INT)
    print(type(SAYI))
    # *********************************    SAYFANIN YÜKLENMESİ    *********************************
    browser = webdriver.Chrome(ChromeDriverManager().install())
    url = "https://biruni.tuik.gov.tr/nufusmenuapp/menu.zul"
    browser.get(url)
    # *********************************    SAYFANIN YÜKLENMESİ    *********************************
    # *********************************    SEÇİM YILININ BELİRLENMESİ    *********************************
    time.sleep(T)
    browser.refresh()
    time.sleep(T)
    NUFUS_YILI_SECIM = browser.find_element_by_xpath("/html/body/div/div/div/div/div[2]/div/table/tbody/tr[1]/td/span").click()
    # *********************************    SEÇİM YILININ BELİRLENMESİ    *********************************
    # *********************************    İDARİ BİRİM SEÇİMİ   *********************************
    time.sleep(T)
    IDARI_BIRIM_SECIM = browser.find_element_by_xpath("/html/body/div/div/div/div/table[2]/tbody/tr[1]/td/div[1]/div[2]/table/tbody/tr/td[1]/select/option[2]").click()
    time.sleep(T)
    IDARI_BIRIM_SECIM_a = browser.find_element_by_xpath("/html/body/div/div/div/div/table[2]/tbody/tr[1]/td/div[1]/div[2]/table/tbody/tr/td[1]/select/option[1]").click()
    # *********************************    İDARİ BİRİM SEÇİMİ    *********************************

    # *********************************    İL SEÇİMİ    *********************************----------------------------------
    time.sleep(T)
    IL_SECIM = browser.find_element_by_xpath("/html/body/div/div/div/div/table[2]/tbody/tr[1]/td/div[1]/div[2]/table/tbody/tr/td[2]/select/option["+SAYI+"]").click()
    print(IL_SECIM)
    # *********************************    İL SEÇİMİ    *********************************
    print("3 buraya kadar başarılı")
    # *********************************    EXCEL BUTONU SEÇİMİ   ************************
    time.sleep(T)
    EXCEL_BUTONU_SECIM = browser.find_element_by_xpath("/html/body/div/div/div/div/table[2]/tbody/tr[1]/td/div[2]/div/table/tbody/tr/td[1]/table/tbody/tr/td[2]/span/span[2]/label/img").click()
    # *********************************    EXCEL BUTONU SEÇİMİ    ***********************
    # *********************************    RAPOR BUTONU SEÇİMİ   ************************
    time.sleep(T)
    RAPOR_BUTON_SECIM = browser.find_element_by_xpath("/html/body/div/div/div/div/table[2]/tbody/tr[1]/td/div[4]/div[2]/table/tbody/tr/td[2]/input").click()
    time.sleep(3)
    # *********************************    RAPOR BUTONU SEÇİMİ    ***********************
    # *********************************    HATA SAYFASI REFRESH METODU    ***************
    BASLIKLAR = browser.window_handles
    for A in BASLIKLAR:
        print(A)
    browser.switch_to.window(A)
    browser.refresh()
    time.sleep(T)
    browser.quit()
    # *********************************    HATA SAYFASI REFRESH METODU    ****************
    SAYI_INT += 1
    IL_SAYISI -= 1

    # *********************************    İL İL VERİ İNDİRME DÖNGÜSÜ    ********************************************************************












1 Beğeni

time.sleep ile beklenmesi gereken miktar tutturalamayabilinir ise Explicit Wait kullanılarak işlem kolaylaştırılabilir. Mesela “10 saniye beklemeye hazırlan ama üzerine basılacak eleman basılabilir hale geldiğinde beklemeyi kes ve tıkla” denilebilir:

# XPATH ile seçileceğini bildirmek için
from selenium.webdriver.common.by import By

# Driver'a ait bekleme fonksiyonu (time.sleep'in muadili)
from selenium.webdriver.support.ui import WebDriverWait

# Ne zamana dek beklenmesi gerektiğinin şartlarını bildirmek için
from selenium.webdriver.support import expected_conditions as EC

# (en fazla) 10 saniyelik bir bekleme objesi
bekle = WebDriverWait(browser, 10)

# "Şu XPATH'e sahip eleman tıklanabilir olana kadar bekle" diyoruz; elemanı döndürür
eleman = bekle.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div...")))

# artık tıklayabiliriz
eleman.click()

Bu prosedürü time.sleep kullanılan diğer yerlere de uygulamak gerekebilir.

Mesela paylaştığınız kod üzerinden:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

bekle = WebDriverWait(browser, 10)
IDARI_BIRIM_SECIM = bekle.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div/div/div/div/table[2]/tbody/tr[1]/td/div[1]/div[2]/table/tbody/tr/td[1]/select/option[2]")))
IDARI_BIRIM_SECIM.click()
3 Beğeni