Python – Selenium жалуется на то, что элемент не прокручивается в поле зрения после прокрутки к этому элементу

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

selenium.common.exceptions.ElementNotInteractableException: Сообщение: Элемент не может быть прокручен в поле зрения

Я пробовал использовать эти методы:

  • driver.execute_script("аргументы[0].scrollIntoView();", элемент)
  • driver.execute_script("arguments[0].scrollIntoView();", driver.find_element_by_xpath(xpath элемента))
  • действия.move_to_element(элемент)

Все эти методы имеют один и тот же результат: страница будет прокручиваться до элемента, но когда пришло время нажать на элемент, она жалуется, что элемент не может быть прокручен в поле зрения.

КОД:

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), и оба они работают для прокрутки, но когда пришло время нажать на элемент жалуется, что его нельзя прокрутить в поле зрения.

Можете ли вы поделиться ссылкой на страницу, над которой вы работаете?

Prophet 21.11.2022 21:33

Отвечает ли это на ваш вопрос? Прокрутка до элемента с помощью веб-драйвера?

Sid 21.11.2022 21:34

Я добавил ссылку на страницу, над которой я работаю.

maxpower8888 21.11.2022 21:37
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
Python PyPDF2 - запись метаданных PDF
Python PyPDF2 - запись метаданных PDF
Python скрипт, который будет записывать метаданные в PDF файл, для этого мы будем использовать PDF ридер из библиотеки PyPDF2 . PyPDF2 - это...
Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
Почему Python - идеальный выбор для проекта AI и ML
Почему Python - идеальный выбор для проекта AI и ML
Блог, которым поделился Harikrishna Kundariya в нашем сообществе Developer Nation Community.
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Анализ продукта магазина на Tokopedia
Анализ продукта магазина на Tokopedia
Tokopedia - это место, где продавцы могут продавать свои товары. Товар должен быть размещен на витрине, чтобы покупателям было легче найти товар...
1
3
101
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете применить метод 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> Знаете ли вы, что это значит? Я еще новичок в программировании.

maxpower8888 21.11.2022 21:52

Обновлено: мне удалось найти решение для моего комментария выше, element.location_once_scrolled_into_view сделал свое дело для того, о чем здесь спрашивали, спасибо!

maxpower8888 21.11.2022 22:10

Итак, как я понимаю, ваша проблема уже решена или вам все еще нужна помощь?

Prophet 21.11.2022 22:29

Моя проблема решена, спасибо.

maxpower8888 21.11.2022 22:58

Большой! Приятно это знать 👍

Prophet 21.11.2022 23:05

Другие вопросы по теме