python: кнопка на сайте www.soccer24.com стала не кликабельна!
Долгое время работал вот этот код!
driver.get("https://www.soccer24.com/")
buttons = driver.find_elements('css selector', '#live-table > div.filters > div.calendarCont > div > '
'button.calendar__navigation.calendar__navigation--tomorrow')
for button in buttons:
button. Click()
Видимо что-то админ сайта изменил - никак не могу понять что! Есть подозрение, что сайт стал распознавать курсор мыши над кнопкой!
Ответы (2 шт):
В документации не нашел вызова с 3 аргументами, попробуйте следующее:
buttons = driver.find_elements('css selector', '#live-table > div.filters > div.calendarCont > div > button.calendar__navigation.calendar__navigation--tomorrow')
или с использование By.CSS_SELECTOR:
from selenium.webdriver.common.by import By
buttons = driver.find_elements(By.CSS_SELECTOR, '#live-table > div.filters > div.calendarCont > div > button.calendar__navigation.calendar__navigation--tomorrow')
Кнопка нажимается путем JS в консоли (F12 - dev tools) без мыши:
document.querySelector('#live-table > div.filters > div.calendarCont > div > button.calendar__navigation.calendar__navigation--tomorrow').click()
так что и в Python не должно быть вопросов.
В дополнению к ответу хочу сказать что по-видимому кнопка на сайте одна поэтому делать for нет смысла как и искать кнопки.
Таким образом код можно переписать как-то так:
driver.get("https://www.soccer24.com/")
button = driver.find_element('css selector', '#live-table > div.filters > div.calendarCont > div > button.calendar__navigation.calendar__navigation--tomorrow')
button.Click()
Еще заметил у Вас разрыв между button. и Click() мне кажется Python должен на такое ругаться.
Обновление ответа
При тестировании кода на Cелениуме выяснилось что элемент не найден. Пришла идея дождаться его появления на страницы, после того как исчезнут скелетоны - те самые пустые квадратики, которые отображают где появятся элементы, что я и делаю в данном решении.
Необходимы дополнительные импорты:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
Код:
driver.get("https://www.soccer24.com/")
selector = f'''#live-table >
div.filters >
div.calendarCont > div >
button.calendar__navigation.calendar__navigation--tomorrow'''
try:
button = WebDriverWait(driver, 30).until(
EC.presence_of_element_located((By.CSS_SELECTOR, selector))
)
finally:
pass
if (button):
button.click()
sleep(100)
driver.quit()
Демонстрация работы скрипта, видео укорочено для того чтобы быть возможным опубликованным тут.
driver.get("https://www.soccer24.com/")
time.sleep(5)
buttons = driver.find_elements('class name', 'calendar__navigation--tomorrow')
print(buttons)
for button in buttons:
driver.execute_script("arguments[0].click();", button)
time. Sleep(1)

