Python Selenium Dropdown List Sorunu

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Süper Üye
Katılım
21 Eyl 2020
Mesajlar
646
Çözümler
4
Tepki puanı
43
Ödüller
5
Sosyal
5 HİZMET YILI
Python:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
import time

options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)

driver = webdriver.Chrome()
driver.maximize_window()


def getInputs():
    global filtre
    global kosul
    global deger
    filtre = input("Filtre giriniz: ")
    kosul = input("Koşul giriniz: ")
    deger = input("Değer giriniz: ")

def reset():
    driver.get("https://tr.tradingview.com/screener/")
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.tv-screener-toolbar__button.tv-screener-toolbar__button--options.tv-screener-toolbar__button--filters.apply-common-tooltip.common-tooltip-fixed'))).click()
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.tv-screener-search__reset.js-search-reset'))).click()
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "tv-screener-search__input"))).click()

def get_values():
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "tv-screener-search__input"))).send_keys(filtre)
    wait = WebDriverWait(driver, 10)
    dropdown_element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, 'tv-screener-dialog__selectbox-dropdown-toggle')))
    dropdown_element.click()
    time.sleep(0.1)
    if(kosul != ""):
        options = driver.find_elements(By.CSS_SELECTOR, "span.tv-dropdown-behavior__item")
        if kosul == "Küçük":
            for option in options:
                if option.get_attribute("data-value") == "less":
                    option.click()
                    break
        elif kosul == "Küçük veya Eşit":
            for option in options:
                if option.get_attribute("data-value") == "eless":
                    option.click()
                    print("ok")
                    break
        elif kosul == "Büyük":
            for option in options:
                if option.get_attribute("data-value") == "greater":
                    option.click()
                    break
        elif kosul == "Büyük veya Eşit":
            for option in options:
                if option.get_attribute("data-value") == "egreater":
                    option.click()
                    break
        elif kosul == "Kesişimler":
            for option in options:
                if option.get_attribute("data-value") == "crosses":
                    option.click()
                    break
        elif kosul == "Yukarı Keser":
            for option in options:
                if option.get_attribute("data-value") == "crosses_above":
                    option.click()
                    break
        elif kosul == "Aşağı Keser":
            for option in options:
                if option.get_attribute("data-value") == "crosses_below":
                    option.click()
                    break
        elif kosul == "Arasında":
            for option in options:
                if option.get_attribute("data-value") == "in_range":
                    option.click()
                    break
        elif kosul == "Dışarı":
            for option in options:
                if option.get_attribute("data-value") == "not_in_range":
                    option.click()
                    break
        elif kosul == "Eşit":
            for option in options:
                if option.get_attribute("data-value") == "equal":
                    option.click()
                    break
        elif kosul == "Eşit Değil":
            for option in options:
                if option.get_attribute("data-value") == "nequal":
                    option.click()
                    break

    value = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'input[type="text"]')))
    value.send_keys(deger)
    time.sleep(3)
    elements = driver.find_elements(By.CLASS_NAME, "tv-screener__symbol")
    texts = [element.text for element in elements]
    print(texts)

while True:
    getInputs()
    reset()
    get_values()
    time.sleep(20)

Yukarı yazdığım kodda bir yere kadar hava hoş ama iş dropdown listesini açmaya geldiğinde Element not interectable hatası veriyor ya da hiç hata vermeden basmayıp devam ediyor bir de Value kısmına da aynı şekilde değer giremiyorum. İşin içinden çıkamadım şimdiden teşekkürler sizde siteye gidip bakabilirsiniz.
 
Süper Üye
Katılım
23 Nis 2019
Mesajlar
981
Çözümler
2
Tepki puanı
79
Ödüller
6
7 HİZMET YILI
Python:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
import time

options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)

driver = webdriver.Chrome()
driver.maximize_window()


def getInputs():
    global filtre
    global kosul
    global deger
    filtre = input("Filtre giriniz: ")
    kosul = input("Koşul giriniz: ")
    deger = input("Değer giriniz: ")

def reset():
    driver.get("https://tr.tradingview.com/screener/")
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.tv-screener-toolbar__button.tv-screener-toolbar__button--options.tv-screener-toolbar__button--filters.apply-common-tooltip.common-tooltip-fixed'))).click()
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.tv-screener-search__reset.js-search-reset'))).click()
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "tv-screener-search__input"))).click()

def get_values():
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "tv-screener-search__input"))).send_keys(filtre)
    wait = WebDriverWait(driver, 10)
    dropdown_element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, 'tv-screener-dialog__selectbox-dropdown-toggle')))
    dropdown_element.click()
    time.sleep(0.1)
    if(kosul != ""):
        options = driver.find_elements(By.CSS_SELECTOR, "span.tv-dropdown-behavior__item")
        if kosul == "Küçük":
            for option in options:
                if option.get_attribute("data-value") == "less":
                    option.click()
                    break
        elif kosul == "Küçük veya Eşit":
            for option in options:
                if option.get_attribute("data-value") == "eless":
                    option.click()
                    print("ok")
                    break
        elif kosul == "Büyük":
            for option in options:
                if option.get_attribute("data-value") == "greater":
                    option.click()
                    break
        elif kosul == "Büyük veya Eşit":
            for option in options:
                if option.get_attribute("data-value") == "egreater":
                    option.click()
                    break
        elif kosul == "Kesişimler":
            for option in options:
                if option.get_attribute("data-value") == "crosses":
                    option.click()
                    break
        elif kosul == "Yukarı Keser":
            for option in options:
                if option.get_attribute("data-value") == "crosses_above":
                    option.click()
                    break
        elif kosul == "Aşağı Keser":
            for option in options:
                if option.get_attribute("data-value") == "crosses_below":
                    option.click()
                    break
        elif kosul == "Arasında":
            for option in options:
                if option.get_attribute("data-value") == "in_range":
                    option.click()
                    break
        elif kosul == "Dışarı":
            for option in options:
                if option.get_attribute("data-value") == "not_in_range":
                    option.click()
                    break
        elif kosul == "Eşit":
            for option in options:
                if option.get_attribute("data-value") == "equal":
                    option.click()
                    break
        elif kosul == "Eşit Değil":
            for option in options:
                if option.get_attribute("data-value") == "nequal":
                    option.click()
                    break

    value = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'input[type="text"]')))
    value.send_keys(deger)
    time.sleep(3)
    elements = driver.find_elements(By.CLASS_NAME, "tv-screener__symbol")
    texts = [element.text for element in elements]
    print(texts)

while True:
    getInputs()
    reset()
    get_values()
    time.sleep(20)

Yukarı yazdığım kodda bir yere kadar hava hoş ama iş dropdown listesini açmaya geldiğinde Element not interectable hatası veriyor ya da hiç hata vermeden basmayıp devam ediyor bir de Value kısmına da aynı şekilde değer giremiyorum. İşin içinden çıkamadım şimdiden teşekkürler sizde siteye gidip bakabilirsiniz.
Element not interactable hatası genellikle sayfa yüklenmesi veya yeterli bekleme süresi olmadığı zamanlarda ortaya çıkar. Bu nedenle, kodunuzdaki bazı noktalarda WebDriverWait kullanabilirsiniz.

Örneğin, dropdown listesi için: dropdown_element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, 'tv-screener-dialog__selectbox-dropdown-toggle'))) dropdown_element.click()
Bu kod parçası, dropdown elementinin tıklanabilir olmasını bekler ve ardından tıklar. Benzer şekilde, değer girişi için de şu kod parçasını kullanabilirsiniz: value = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'input[type="text"]'))) value.clear() value.send_keys(deger) value.send_keys(Keys.RETURN)
Bu kod parçası, sayfada bir input elementinin tıklanabilir olmasını bekler, değer girer ve RETURN tuşuna basar.

Bu değişiklikleri yaparak kodunuzu tekrar deneyebilirsiniz. Eğer hala sorun yaşıyorsanız, lütfen detaylı bir hata mesajı paylaşın veya hangi noktada sorun yaşadığınıza dair daha fazla bilgi verin, yardımcı olmaya çalışırım.
 
Süper Üye
Katılım
21 Eyl 2020
Mesajlar
646
Çözümler
4
Tepki puanı
43
Ödüller
5
Sosyal
5 HİZMET YILI
ChatGPT yanıtı... Neyse bu arada sayfa tamamen yükleniyor zaten
 
Süper Üye
Katılım
21 Eyl 2020
Mesajlar
646
Çözümler
4
Tepki puanı
43
Ödüller
5
Sosyal
5 HİZMET YILI
UP
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst