Я новичок в селене и получаю следующую ошибку: 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
@BarrythePlatipus, спасибо, я добавил это в описание проблемы
Попробуйте это, это работает для меня:
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()
У меня все работает отлично, вы обновляете страницу?
Потому что взаимодействие 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"} ```
.. почему Селен? Я бы пошел сюда за решением на основе запросов, очищая этот AJAX API, а затем используя BeautifulSoup для анализа ответа json.
Спасибо, это (код после обновления) сработало!
Конечно, необходимо ответить на вопрос: какова ваша конечная цель, чего вы пытаетесь достичь, какие данные вы хотите получить с этого пейджера и в каком формате?