#python #python-3.x #selenium #web-scraping #beautifulsoup
#python #python-3.x #селен #очистка веб-страниц #beautifulsoup
Вопрос:
Я пытаюсь подсчитать, сколько раз с этого сайта нажимается опция «Загрузить больше отзывов». Но я получаю следующую ошибку:
selenium.common.исключения.Исключение StaleElementReferenceException: Сообщение: устаревшая ссылка на элемент: элемент не прикреплен к документу страницы
Вот мой код на Python:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--disable-notifications")
driver = webdriver.Chrome(ChromeDriverManager().install(), chrome_options=options)
url = "https://www.justdial.com/Delhi/S-K-Premium-Par-Hari-Nagar/011PXX11-XX11-131128122154-B8G6_BZDET"
driver.get(url)
pop_up = WebDriverWait(driver, 30).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="best_deal_detail_div"]/section/span')))
pop_up.click() # For disable pop-up
count = 0
while True:
element = WebDriverWait(driver, 20).until(
EC.element_to_be_clickable((By.XPATH, "//span[text()='Load More Reviews..']")))
element.click()
count = count 1
print(count)
Ответ №1:
Попробуйте приведенный ниже код:
count = 0
while True:
try:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Load More Reviews..']"))).click()
count = count 1
except StaleElementReferenceException:
pass
except TimeoutException:
break
print(count)
Проблема: в соответствии с вашим кодом вы ожидаете, что кнопка Загрузить больше отзывов станет интерактивной, теперь, как только она нажата, и даже до завершения загрузки страницы ее обнаружение, если кнопка есть и доступна для просмотра, но когда она пытается щелкнуть, к тому времени страница все еще находится в процессе обновления / загрузки дополнительных обзоров. В результате HTML DOM
прерывается / обновляется и stale element exception
приходит.
Также, поскольку в вашем коде нет break
условия, я добавил его. Если на странице нет кнопки Загрузить дополнительные обзоры. Это приведет к выходу из цикла.
Комментарии:
1. Также в вашем коде нет условия прерывания, поэтому он будет продолжать выполняться. Как вы указали, while равно True. Пожалуйста, проверьте обновленный на разрыв.