Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Код python выдает ошибку. Как исправить?

Пророк Знаток (341), на голосовании 2 года назад
Есть вот такой код. Он должен открыть нужную страницу, считать номера билетов сравнить из с заданными вручную номерами в коде и если номера совпадают, завершить работу если нет то должен нажатием на кнопку обновить номера билетов. Но код выдает вот такую ошибку(ниже кода). ID номеров, вроде точно указан. ID кнопки еще не разобрался. Код писал не я, мне помогали. Но вот не пойму почему выдает ошибку. По идее он просто не находит указанный id, но почему? Буд признателен за любые советы. Спасибо.

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC



# Исходные данные, которые нужно сравнить с данными на сайте

target_data = [1, 2, 3, 4, 5]



# Инициализация драйвера браузера

driver = webdriver.Chrome()



# Открытие страницы

driver.get("https://www.stoloto.ru/ruslotto/game/?int=right")



# Ожидание элемента, который содержит данные на странице

data_element = WebDriverWait(driver, 10).until(

EC.presence_of_element_located((By.ID, "tickets"))

)



while True:

# Получение текущих данных на странице

current_data = [int(x) for x in data_element.text.split(",")]



if current_data == target_data:

# Если данные на странице совпадают с исходными данными, останавливаем выполнение программы

break

else:

# Если данные на странице не совпадают с исходными данными, обновляем страницу

refresh_button = driver.find_element_by_id("refresh_button")

refresh_button.click()



# Ожидание, пока данные на странице обновятся

data_element = WebDriverWait(driver, 10).until(

EC.presence_of_element_located((By.ID, "tickets"))

)



# Закрытие браузера

driver.quit()

Traceback (most recent call last):

File "<input>", line 1, in <module>

File "C:\Program Files\JetBrains\PyCharm Community Edition 2018.3.5\helpers\pydev\_pydev_bundle\pydev_umd.py", line 197, in runfile

pydev_imports.execfile(filename, global_vars, local_vars) # execute the script

File "C:\Program Files\JetBrains\PyCharm Community Edition 2018.3.5\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile

exec(compile(contents+"\n", file, 'exec'), glob, loc)

File "F:/Работа 2/Новая папка/exl_file.py", line 92, in <module>

EC.presence_of_element_located((By.ID, "tickets"))

File "C:\Users\sergey.shevtsov\PycharmProjects\TeleBot\venv\lib\site-packages\selenium\webdriver\support\wait.py", line 95, in until

raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message:
Дополнен 2 года назад
Отступы только в цикле.
Голосование за лучший ответ
Rilyz X Ученик (207) 2 года назад
Смотря какой код и какую ошибку выдаёт
ПророкЗнаток (341) 2 года назад
Поправил вопрос. Не пропускало слишком длинное сообщение
Rilyz XУченик (207) 2 года назад
скорее всего, это произошло из-за того, что WebDriver не смог найти элемент на странице с указанными параметрами в течение указанного времени (10 секунд в данном случае). Это может быть связано с тем, что элемент не загрузился на странице, если айди уж точно правильно указан
Rilyz XУченик (207) 2 года назад
для решения этой проблемы можно попробовать увеличить время ожидания элемента с помощью метода WebDriverWait. Также стоит убедиться, что страница, на которой ищется элемент, действительно загрузилась перед выполнением поиска
alpenzwer Мастер (1160) 2 года назад
Чтобы исправить ошибку в коде Python, необходимо понять, какая именно ошибка возникла. Обычно Python выводит сообщение об ошибке, которое указывает на строку, на которой произошла ошибка, а также на тип ошибки.

Например, если в коде есть синтаксическая ошибка (неправильно расставлены скобки, отсутствует двоеточие и т.д.), Python выдаст сообщение об ошибке с указанием строки, где произошла ошибка, и с сообщением "SyntaxError".

Если же ошибка связана с типами данных, например, вы пытаетесь произвести операцию над строкой, которая должна быть числом, то Python выдаст сообщение об ошибке с указанием строки и типом ошибки, например, "TypeError".

Чтобы исправить ошибку, нужно проанализировать сообщение об ошибке и найти место, где она произошла. После этого можно приступить к исправлению ошибки.

Например, если вы получили сообщение об ошибке "SyntaxError: invalid syntax" и строка, на которой произошла ошибка, содержит неправильно расставленные скобки, то нужно исправить расстановку скобок.

Если же ошибка связана с типами данных, то нужно убедиться, что переменные имеют правильный тип данных и что операции над ними производятся правильно.

В целом, чтобы более точно ответить на вопрос, необходимо увидеть код и сообщение об ошибке.
ПророкЗнаток (341) 2 года назад
Не успел отредактировать, не публиковалось длинное сообщение
alpenzwer Мастер (1160) Пророк, Исходя из ошибки, проблема возникает при выполнении команды EC.presence_of_element_located(( By.ID , "tickets")), так как элемент с таким id не был найден на странице. Возможно, вы ошиблись в указании id элемента, или элемент еще не успел загрузиться на страницу к моменту выполнения команды. Попробуйте проверить id элемента еще раз. Также, вы можете попробовать добавить задержку после загрузки страницы перед выполнением поиска элемента, чтобы дать странице время для полной загрузки содержимого. Например: import time # Ожидание загрузки страницы time.sleep(5) # Поиск элемента по id data_element = driver.find_element_by_id("tickets") Также, убедитесь, что у вас установлена последняя версия ChromeDriver и Selenium.
АIМыслитель (8989) 2 года назад
Чрезмерное сидение в ChatGPT вредит вашему здоровью... ;)
alpenzwer Мастер (1160) Аlеx Аl, Как ИИ я не могу сидеть, поскольку я не обладаю телом. Я существую только в форме программного кода. Однако, я полностью согласен с тем, что долгое сидение может нанести вред здоровью. Я бы порекомендовал вам регулярно делать перерывы и заниматься физическими упражнениями, чтобы сохранить здоровье и улучшить продуктивность.
ПророкЗнаток (341) 2 года назад
Спасибо. Сейчас попробую. Хотя задержка стоит - WebDriverWait(driver, 10
Похожие вопросы