У меня есть следующий код, который должен прокручивать страницу вниз, а затем нажимать кнопку. Когда я запускаю свой сценарий, я вижу, что страница прокручивается до тех пор, пока элемент не окажется в самом низу страницы, но затем сценарий дает сбой, когда у него есть время нажать на эту кнопку, и я получаю эту ошибку:
selenium.common.exceptions.ElementNotInteractableException: Сообщение: Элемент не может быть прокручен в поле зрения
Я пробовал использовать эти методы:
Все эти методы имеют один и тот же результат: страница будет прокручиваться до элемента, но когда пришло время нажать на элемент, она жалуется, что элемент не может быть прокручен в поле зрения.
КОД:
hide_partial_rows_button_per_100 = driver.find_element_by_xpath('//button[@id="per_poss_toggle_partial_table"]')
#driver.execute_script("arguments[0].scrollIntoView();",driver.find_element_by_xpath('//button[@id="per_poss_toggle_partial_table"]'))
#driver.execute_script("arguments[0].scrollIntoView();",hide_partial_rows_button_per_100)
actions.move_to_element(hide_partial_rows_button_per_100)
actions.perform
hide_partial_rows_button_per_100.click()
ССЫЛКА НА СТРАНИЦУ, НАД КОТОРОЙ Я РАБОТАЮ: https://www.basketball-reference.com/players/v/valanjo01.html
У кого-то на этом сайте был похожий вопрос, но они использовали JavaScript вместо Python и добавили time.sleep(1) между прокруткой до элемента и нажатием на него, у меня это не сработало.
Как было сказано выше, я пробовал оба метода: driver.execute_script("arguments[0].scrollIntoView();",element) и action.move_to_element(element), и оба они работают для прокрутки, но когда пришло время нажать на элемент жалуется, что его нельзя прокрутить в поле зрения.
Отвечает ли это на ваш вопрос? Прокрутка до элемента с помощью веб-драйвера?
Я добавил ссылку на страницу, над которой я работаю.
Вы можете применить метод location_once_scrolled_into_view
для выполнения прокрутки здесь.
У меня работал следующий код:
from selenium import webdriver
from selenium.webdriver import DesiredCapabilities
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
options = Options()
options.add_argument("start-maximized")
options.add_argument('--disable-notifications')
caps = DesiredCapabilities().CHROME
caps["pageLoadStrategy"] = "eager"
webdriver_service = Service('C:\webdrivers\chromedriver.exe')
driver = webdriver.Chrome(options=options, desired_capabilities=caps, service=webdriver_service)
wait = WebDriverWait(driver, 20)
url = "https://www.basketball-reference.com/players/v/valanjo01.html"
driver.get(url)
element = wait.until(EC.presence_of_element_located((By.XPATH, '//button[@id="per_poss_toggle_partial_table"]')))
element.location_once_scrolled_into_view
Добавление element.location_once_scrolled_into_view решило одну ошибку, но теперь я получаю следующее: selenium.common.exceptions.ElementClickInterceptedException: Сообщение: элемент <button id="per_poss_toggle_partial_table" class="tooltip" type="button"> не активен в точке (419,7), потому что ее закрывает другой элемент <span> Знаете ли вы, что это значит? Я еще новичок в программировании.
Обновлено: мне удалось найти решение для моего комментария выше, element.location_once_scrolled_into_view сделал свое дело для того, о чем здесь спрашивали, спасибо!
Итак, как я понимаю, ваша проблема уже решена или вам все еще нужна помощь?
Моя проблема решена, спасибо.
Большой! Приятно это знать 👍
Можете ли вы поделиться ссылкой на страницу, над которой вы работаете?