Нажмите на все комбинации из выпадающего меню и напечатайте текстовый результат в Selenium + Python: функция ожидания не работает - PullRequest
0 голосов
/ 15 марта 2020

Я пытаюсь получить все комбинации с этого сайта: https://www.kgm.gov.tr/Sayfalar/KGM/SiteTr/Otoyollar/OtoyolUcretSorgu.aspx

Извините за язык этого сайта Turki sh. Я переведу тексты, которые требуют от вас понимания проблемы. Переводы выпадающего меню:

Отобан = Шоссе

Гироси Гисеси = Начало шоссе

Чикис Гисеси = Конец шоссе

Ара c sinifi = Оценка автомобиля

Ucreti Hesapla = Рассчитать цену, между началом и концом шоссе

Так что в основном я хочу нажать на все варианты соответственно и нажать "Ucreti Hesapla", чтобы увидеть цена и сохранить.

Мой код:

from selenium import webdriver
import time
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait


url = "https://www.kgm.gov.tr/Sayfalar/KGM/SiteTr/Otoyollar/OtoyolUcretSorgu.aspx"

driver = webdriver.Chrome("C:/Users/atkarakas/chromedriver.exe")
driver.get(url)
highways = Select(driver.find_element_by_xpath('//*[@id="ctl00_ctl58_g_317e7991_4b2e_47d1_b939_7e3f3b7c8256_ctl00_ddlOtoyol"]'))
for highway in highways.options:
    highways.select_by_value(highway.get_attribute('value'))

    beginnings= Select(driver.find_element_by_xpath('//*[@id="ctl00_ctl58_g_317e7991_4b2e_47d1_b939_7e3f3b7c8256_ctl00_ddlGise1"]'))
    for beginning in beginnings.options:
        beginnings.select_by_value(beginning.get_attribute('value'))

        ends = Select(driver.find_element_by_xpath('//*[@id="ctl00_ctl58_g_317e7991_4b2e_47d1_b939_7e3f3b7c8256_ctl00_ddlGise2"]'))
        for end in ends.options:
            ends.select_by_value(end.get_attribute('value'))

            vehicles = Select(driver.find_element_by_xpath('//*[@id="ctl00_ctl58_g_317e7991_4b2e_47d1_b939_7e3f3b7c8256_ctl00_ddlAracSinifi"]'))
            for vehicle in vehicles.options:
                vehicles.select_by_value(vehicle.get_attribute('value'))

                #The code works fine until here, the main problem begins here
                driver.find_element_by_xpath('//*[@id="ctl00_ctl58_g_317e7991_4b2e_47d1_b939_7e3f3b7c8256_ctl00_Sorgula"]').click()
                results=driver.find_element_by_xpath('//*[@id="ctl00_ctl58_g_317e7991_4b2e_47d1_b939_7e3f3b7c8256_ctl00_LblResult"]').text
                print (results)
driver.close()  

Когда я запускаю код, эта ошибка растет: StaleElementReferenceException: stale element reference: element is not attached to the page document.

Я знаю, что должен использовать time.sleep() или WebDriverWait(). Я прочитал эту документацию: https://selenium-python.readthedocs.io/waits.html.

Я пробовал каждую функцию "ожидания", чтобы решить проблему. Но это не работает.

Какой код ожидания следует использовать и куда его поместить, чтобы сохранить текст после click()? Или есть какой-нибудь другой альтернативный метод, чтобы увидеть результаты?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...