Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
1 / 2 / 0
Регистрация: 30.04.2020
Сообщений: 21

Ожидание загрузки страницы

23.09.2020, 02:37. Показов 4781. Ответов 1

Студворк — интернет-сервис помощи студентам
Приветствую, уважаемые программисты!
Я новичок в программировании, а в питоне и уж тем более в селениуме - вообще ноль.
Случилась у меня проблема такая - нужно стало написать бота для сайта, который будет выполнять за меня всю работу. И вот как бы он и работает, но работает очень криво и приходится высчитывать тайминги и выставлять sleep() для того, чтобы страница подгрузилась и селениум смог найти тот объект, который мне нужен. Но меня это не устроило, и я решил пойти еще дальше. Нашел метод find_element_by_xpath(), и где-то читал, что этот метод ожидает 30 секунд для прогрузки страницы и самого элемента, а затем, если прошло менее 30 секунд, например, 20, происходит уже взаимодействие с элементом.
Но убрав sleep() перед методом find_element_by_xpath(), никакой магии не происходит - а программа просто прекращает работу из-за того, что элемент не был найден:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Traceback (most recent call last):
  File "parser.py", line 64, in <module>
    main()
  File "parser.py", line 34, in main
    market_change_lot_minutes_value = driver.find_element_by_xpath("//input[@class='text-field'][@name='lotVolume']").clean().send_keys("200")
  File "C:\Users\HYPER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 394, in find_element_by_xpath
    return self.find_element(by=By.XPATH, value=xpath)
  File "C:\Users\HYPER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 976, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "C:\Users\HYPER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Users\HYPER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//input[@class='text-field'][@name='lotVolume']"}
  (Session info: chrome=85.0.4183.102)
И все-таки, в моем случае время (даже секунды) играют очень большую роль, и для меня потеря одной каждой секунды сказывается на результате работы бота. Можно ли как-то решить проблему, чтобы не пришлось выставлять тайминги для прогрузки страницы?

Привожу пример кода:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from selenium import webdriver
import time
 
# authorize to market
def main():
    driver = webdriver.Chrome()
    driver.get("https://ekt.tele2.ru/lk")
    number_field = driver.find_element_by_class_name("text-field")
    number_field.click()
    phoneNumber = driver.find_element_by_id('keycloakAuth.phone')
    print ("Enter the phone number: ")
    entered_phone_number = input()
    phoneNumber.send_keys(entered_phone_number)
    market_authorize = driver.find_element_by_class_name("keycloak-login-form__button")
    market_authorize.click()
    print("Enter a sms-code: ")
    sms_password_from_the_phone = input()
    market_sms_password = driver.find_element_by_id('codeSymbolField1_0')
    market_sms_password.send_keys(sms_password_from_the_phone)
    time.sleep(5)
 
    # starting a bot
    e = 50
    while (e!=0):
        c = 2
        while (c!=0):
            # coming to creating calls lot
            driver.get("https://ekt.tele2.ru/stock-exchange/calls")
            time.sleep(2)
            market_add_minutes_lot = driver.find_element_by_class_name("btn")
            market_add_minutes_lot.click()
            time.sleep(2)
            market_add_minutes_more_to_lot = driver.find_element_by_xpath("//div[@class='lot-setup__manual-input']")
            market_change_lot_minutes_value = driver.find_element_by_xpath("//input[@class='text-field'][@name='lotVolume']").send_keys("\b\b200")
            market_set_cost_to_lot = driver.find_element_by_xpath("//div[@class='lot-setup__manual-input']")
            market_change_lot_cost_value = driver.find_element_by_xpath("//input[@class='text-field'][@name='lotCost']").send_keys("\b\b160")
            # creating a minutes lot
            market_create_lot = driver.find_element_by_class_name("btns-box").find_element_by_class_name("btn")
            market_create_lot.click()
            time.sleep(5)
            market_addnot_emoji_to_lot = driver.find_element_by_class_name("btns-box").find_element_by_class_name("btn")
            market_addnot_emoji_to_lot.click()
            c=c-1
Заранее благодарю!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.09.2020, 02:37
Ответы с готовыми решениями:

Ожидание загрузки страницы
Доброго всем дня! Подскажите, как сделать ожидание загрузки страницы в браузере (ie или chrome)? Send(&quot;google.ru&quot;) ...

Ожидание загрузки страницы
Доброго дня. Появилась задача написать макрос на рабочем ноутбуке для excel. Задача типичная - парсинг сайта. В общем проблема 1 -...

Ожидание загрузки страницы
Не знаю, туда ли пишу даже, но тем не менее: есть такая мозолящая глаз &quot;шняжка&quot;. Суть в том, что есть у меня пара самописных скриптиков...

1
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
23.09.2020, 06:06
Цитата Сообщение от MainAdm1n Посмотреть сообщение
что этот метод ожидает 30 секунд
нет не ожидает, нужно проставлять или явные ожидания или неявные, для это прочесть что это такое

Цитата Сообщение от MainAdm1n Посмотреть сообщение
Но убрав sleep() перед методом find_element_by_xpath(), никакой магии не происходит
ибо ее там нет

Цитата Сообщение от MainAdm1n Посмотреть сообщение
Можно ли как-то решить проблему, чтобы не пришлось выставлять тайминги для прогрузки страницы?
можно привязать ожидания к появлению конкретных элементов, и ждать только их, то есть как только появились -идем дальше. Читаем по явные ожидания в селениуме
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.09.2020, 06:06
Помогаю со студенческими работами здесь

Ожидание загрузки страницы в webControl
Извините я уже создавал тему, модератор не удаляй пожалуйста. Я в программировании 3-4 день, есть метод он ждет загрузку страницы ...

Ожидание загрузки страницы в WebBrowser
Суть проблемы - мне нужно чтобы после полной загрузки страницы он возвращался в button1_Click. Но если мы сделаем что то типа ожидания...

Ожидание полной загрузки страницы в WebBrowser
Доброго времени суток! Пишу, для своих нужд, прогу. Суть работы проги такова: заходим на нужную страницу, ждем полной загрузки страницы,...

Ожидание загрузки страницы после нажатия кнопки
Вообщем то есть ссылка https://www.moex.com/ru/derivatives/contractresults.aspx в таблице нужно выбрать период С и ДО далее нажать кнопку...

Как сделать ожидание полной загрузки страницы в webbrowser?
Мне необходимо достать код страницы html из webbrowser в c#. С этим проблем не возникает. Если же страница после открытия еще догружает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru