Selenium: щелчок по элементу перехвачен: элемент не доступен для клика в точке (774, 8907)

Я новичок в селене и получаю следующую ошибку: element click intercepted: Element is not clickable at point (774, 8907) всякий раз, когда я запускаю этот код на веб-странице с кнопкой «Показать больше». Моя цель - получить каждый элемент "таблицы" на веб-странице, но для этого мне нужно нажать кнопку "показать больше", если она присутствует:

driver = webdriver.Chrome(options=chrome_options)
driver.maximize_window()
for el in states_pages:
    driver.get(el)
    err = False
    i = 0
    while not err:
        try:
            more_button = driver.find_element(by=By.CLASS_NAME, value='tpl-showmore-content')
            more_button.click()
        except selexp.NoSuchElementException as e:
            err = True
            print(e)
        except selexp.ElementClickInterceptedException as e:
            err = True
            print(e)
        i+=1

Я пробовал использовать javascript-исполнитель, ожидая, пока кнопка станет доступной, и прокрутил ее до кнопки с помощью действий, но это вообще не сработало.

Пример веб-сайта: https://www.privateschoolreview.com/sat-score-stats/california

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

Barry the Platipus 19.11.2022 15:29

@BarrythePlatipus, спасибо, я добавил это в описание проблемы

njhkugk6i76g6gi6gi7g6 19.11.2022 15:53
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 - это место, где продавцы могут продавать свои товары. Товар должен быть размещен на витрине, чтобы покупателям было легче найти товар...
2
2
85
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуйте это, это работает для меня:

show_more_lnk = driver.find_element(By.CSS_SELECTOR, ".tpl-showmore-content")
driver.execute_script("arguments[0].scrollIntoView(true)", show_more_lnk)
time.sleep(2)
show_more_lnk.click()

Я получаю следующую ошибку: ------------------------------------------------------------‌​--------------- StaleElementReferenceException Traceback (most recent call last) /tmp/ipykernel_27/728423907.py in <module> 12 driver.execute_script("arguments[0].scrollIntoView(true)", show_more_lnk) 13 time.sleep(2) ---> 14 show_more_lnk.click()

njhkugk6i76g6gi6gi7g6 19.11.2022 16:00

У меня все работает отлично, вы обновляете страницу?

AbiSaran 19.11.2022 16:14
Ответ принят как подходящий

Потому что взаимодействие JavaScript. Поэтому вам нужно нажать, используя выполнение JS.

    import time
    while not err:
        try:
            more_button = driver.find_element(by=By.CLASS_NAME, value='tpl-showmore-content')
            driver.execute_script("arguments[0].click();" ,more_button)
            time.sleep(1)
        except selexp.NoSuchElementException as e:
            err = True
            print(e)
        except selexp.ElementClickInterceptedException as e:
            err = True
            print(e)
            break

Обновлять:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
import time
import pandas as pd

options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_argument("start-maximized")
#options.add_experimental_option("detach", True)


s=Service('./chromedriver')
driver= webdriver.Chrome(service=s, options=options)
url='https://www.privateschoolreview.com/sat-score-stats/california'
driver.get(url)
time.sleep(3)

data =[]
for x in range(4):
    try:
        soup = BeautifulSoup(driver.page_source, 'lxml')
        cards = soup.select('[class="tp-list-row list-row-border-2 bg_hover_change"]')
        print(len(cards))
        for x in cards:
            title = x.select_one('a[class="tpl-school-link top-school"]')
            title = title.get_text(strip=True) if title else 'None'
            data.append(title)

            
        loadMoreButton = driver.find_element(By.CSS_SELECTOR, ".tpl-showmore-content")
            
        if loadMoreButton:
            driver.execute_script("arguments[0].click();" ,loadMoreButton)
            time.sleep(1)

       
    except Exception as e:
        pass
        #print(e)
        break

df= pd.DataFrame(set(data))
print(df)

Вывод:

                             0
0        St. Lucys Priory High School
1          Glendale Adventist Academy
2                    The Webb Schools
3            Desert Christian Academy
4                New Covenant Academy
..                                ...
113               Renaissance Academy
114                  Oak Grove School
115             Francis Parker School
116  Rolling Hills Preparatory School
117     Lake Tahoe Preparatory School

[118 rows x 1 columns]

Спасибо, ваше решение действительно помогает избавиться от этой ошибки, но теперь я столкнулся с другой проблемой: код больше не может найти кнопку showmore: ``` Сообщение: нет такого элемента: невозможно найти элемент: {"метод": "селектор CSS","селектор":".tpl-showmore-content"} ```

njhkugk6i76g6gi6gi7g6 19.11.2022 16:17

.. почему Селен? Я бы пошел сюда за решением на основе запросов, очищая этот AJAX API, а затем используя BeautifulSoup для анализа ответа json.

Barry the Platipus 19.11.2022 16:30

Спасибо, это (код после обновления) сработало!

njhkugk6i76g6gi6gi7g6 20.11.2022 04:35

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