Selenium ожидания доступности кнопки
Делаю кликер, который нажимает на кнопку, как только эта кнопка становится доступна (у класса кнопки сервером убирается disabled). Но почему то даже тогда, когда кнопка становится доступна, программа не нажимает ее. Использую нахождение по xpath потому что кнопка на сайте часто меняет свой класс.
Вот код функции:
url = input()
browser.get(url)
time.sleep(15)
try:
wait = WebDriverWait(browser, 900)
ButtBuy = wait.until(EC.element_to_be_clickable((By.XPATH, '//button[contains(@text, "Купить")]')))
except:
print("Ошибка нахождения кнопки покупки, приложение закроется через 30 сек.")
time.sleep(30)
browser.quit()
else:
ButtBuy.click()
wait = WebDriverWait(browser, 5)
ButtConfirm = wait.until(EC.element_to_be_clickable((By.XPATH, '/html/body/div[8]/div/div/div[2]/button[2]')))
ButtConfirm.click()
Поясн. Buttbuy это сама кнопка покупки, а buttconfirm это кнопка подтверждения, которая появляется потом.
Примерный сценарий использования: Ввел url, отошел от компьютера, а через 10 минут кнопка становится активна и программа автоматически ее нажимает.(10 минут это не точное значение, может быть как 3, 5, 6 и т.д.)
Ответы (1 шт):
Можно попробовать вариант через бесконечный цикл, который будет раз в 30 секунд проверять элемент на видимость, и если он увидит кнопку - нажмет на нее, если нет - вернется к началу цикла
try:
while True:
wait = WebDriverWait(browser, 900)
time.sleep(30)
if ButtBuy = wait.until(EC.element_to_be_clickable((By.XPATH,
'//button[contains(@text, "Купить")]'))):
ButtBuy.click()
wait = WebDriverWait(browser, 5)
ButtConfirm = wait.until(EC.element_to_be_clickable((By.XPATH, '/html/body/div[8]/div/div/div[2]/button[2]')))
ButtConfirm.click()
else:
continue
except KeyboardInterrupt:
pass