Элемент не найден на странице при прокрутке вниз (StaleElementReferenceException) - PullRequest
0 голосов
/ 20 февраля 2020

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

selenium.common.exceptions.StaleElementReferenceException : Сообщение: устаревшая ссылка на элемент: элемент не прикреплен к документу страницы.

Я предполагаю, что это потому, что он пытается go очень быстро пройти по странице, но даже когда я изменяю неявное время ожидания на быть больше, это не решает проблему. Я также попытался убедиться, что новое местоположение видно, прежде чем анализировать, чтобы получить URL, но это также не принесло пользы. Любая помощь будет принята с благодарностью!

# import dependencies
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import re
import selenium
import io
import pandas as pd
import urllib.request
import urllib.parse
import requests
from bs4 import BeautifulSoup
import pandas as pd
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
import time
from _datetime import datetime
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
options = webdriver.ChromeOptions()
options.headless=False

driver = webdriver.Chrome("/Users/rishi/Downloads/chromedriver 3")
driver.maximize_window()
prefs = {"profile.default_content_setting_values.notifications" : 2} 
options.add_experimental_option("prefs", prefs)

#open up website
driver.get(
    "https://www.tripadvisor.com/Hotel_Review-g28970-d84078-Reviews-Hyatt_Regency_Washington_on_Capitol_Hill-Washington_DC_District_of_Columbia.html#/media/84078/?albumid=101&type=2&category=101")


image_url = []

end = False
while not(end):
    #wait until element is found and then store all webelements into list
    images = WebDriverWait(driver, 20).until(
        EC.presence_of_all_elements_located(
            (By.XPATH, '//*[@class="media-viewer-dt-root-GalleryImageWithOverlay__galleryImage--1Drp0"]')))

    #iterate through visible images and acquire their url based on background image style
    for index, image in enumerate(images):
        image_url.append(images[index].value_of_css_property("background-image"))

    #if you are at the end of the page then leave loop
    # if(length == end_length):
    #     end = True

    #move to next visible images in the array
    driver.execute_script("arguments[0].scrollIntoView();", images[-1])
    #time.sleep(1)
    #wait until the new web element is visible
    driver.implicitly_wait(10)
    #WebDriverWait(driver, 20).until(EC.visibility_of_element_located(images[-1]))

#clean the list to provide clear links
for i in range(len(image_url)):
    start = image_url[i].find("url(\"") + len("url(\"")
    end = image_url[i].find("\")")
    print(image_url[i][start:end]) 


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...