Python 尝试从不同链接中刮取信息时,过时元素引用元素未附加到页面文档

Python 尝试从不同链接中刮取信息时,过时元素引用元素未附加到页面文档,python,selenium,web-scraping,staleelementreferenceexception,Python,Selenium,Web Scraping,Staleelementreferenceexception,我正在Python上使用Selenium,并尝试移动光标并单击特定元素。这适用于第一个链接,下一个链接的HTML结构相同,但当通过相同的webdriver访问第二个链接时,我得到了StaleElementReferenceException。为什么会发生这种情况?我该如何解决?下面是我正在运行的代码。非常感谢你 def getZest(url):     zestlist = []     yearlist = []     driver.get(url)     time.sleep(5)  

我正在Python上使用Selenium,并尝试移动光标并单击特定元素。这适用于第一个链接,下一个链接的HTML结构相同,但当通过相同的webdriver访问第二个链接时,我得到了StaleElementReferenceException。为什么会发生这种情况?我该如何解决?下面是我正在运行的代码。非常感谢你

def getZest(url):
    zestlist = []
    yearlist = []
    driver.get(url)
    time.sleep(5)
    
    
    result = False;
    attempts = 0;
    while(attempts < 5):
        try:
            Home_Value = wait.until(EC.presence_of_element_located((By.XPATH, "//a[text()='Home value']")))
            action.move_to_element(Home_Value).click().perform()
    
            zestimate = driver.find_element_by_xpath('//*[@id="ds-home-values"]/div/div[3]/button')
            action.move_to_element(zestimate).perform()
            result = True
            break
        except exceptions.StaleElementReferenceException as e:
            print(e)
        attempts = attempts + 1
fivenums = ["https://www.zillow.com/homedetails/212-Haddrell-St-Mount-Pleasant-SC-29464/10922911_zpid/", "https://www.zillow.com/homedetails/20-Grove-St-Hicksville-NY-11801/31127407_zpid/"]
for num in fivenums:
    getZest(num)
def getZest(url):
zestlist=[]
年表=[]
获取驱动程序(url)
时间。睡眠(5)
    
    
结果=假;
尝试次数=0;
而(尝试次数<5次):
尝试:
Home_Value=wait.until(位于((By.XPATH,//a[text()='Home Value'])的_元素的EC.presence_)
操作。将\移动到\元素(主\值)。单击()。执行()
    
zestimate=driver。通过xpath('/*[@id=“ds home values”]/div/div[3]/button')查找元素
动作。将_移动到_元素(zestimate)。执行()
结果=真
中断
例外情况除外。StaleElementReferenceException作为e:
打印(e)
尝试次数=尝试次数+1
五个字母=[”https://www.zillow.com/homedetails/212-Haddrell-St-Mount-Pleasant-SC-29464/10922911_zpid/", "https://www.zillow.com/homedetails/20-Grove-St-Hicksville-NY-11801/31127407_zpid/"]
对于五位数:
getZest(num)

我能够通过以下代码获得关于第一个和第二个链接的信息,没有任何错误:

从selenium导入webdriver
从selenium.webdriver.support.wait导入WebDriverWait
将selenium.webdriver.support.expected_条件导入为EC
从selenium.webdriver.common.by导入
导入时间
来自selenium.common导入异常
u='https://www.oddsportal.com/moving-margins/'
driver=webdriver.Chrome(可执行文件路径=r“chromedriver.exe”)
驱动程序。最大化_窗口()
def getZest(url):
zestlist=[]
年表=[]
获取驱动程序(url)
时间。睡眠(5)
结果=错误
尝试次数=0
action=webdriver.ActionChains(驱动程序)
wait=WebDriverWait(驱动程序,300)
而(尝试次数<5次):
尝试:
Home_Value=wait.until(位于((By.XPATH,//a[text()='Home Value'])的_元素的EC.presence_)
操作。将\移动到\元素(主\值)。单击()。执行()
zestimate=driver。通过xpath('/*[@id=“ds home values”]/div/div[3]/button')查找元素
动作。将_移动到_元素(zestimate)。执行()
结果=真
打破
例外情况除外。StaleElementReferenceException作为e:
打印(e)
尝试次数=尝试次数+1
五个字母=[”https://www.zillow.com/homedetails/212-Haddrell-St-Mount-Pleasant-SC-29464/10922911_zpid/", "https://www.zillow.com/homedetails/20-Grove-St-Hicksville-NY-11801/31127407_zpid/"]
对于五位数:
getZest(num)
在您的代码中,没有显示某些变量的实例化位置,因此,可能这就是问题所在


然而,当打开第一个链接时,网站向我展示了谷歌验证码保护,因此,我想你有某种授权,可以在所有者的许可下刮取这些信息。

我能够通过以下代码获得关于第一个和第二个链接的信息,没有任何错误:

从selenium导入webdriver
从selenium.webdriver.support.wait导入WebDriverWait
将selenium.webdriver.support.expected_条件导入为EC
从selenium.webdriver.common.by导入
导入时间
来自selenium.common导入异常
u='https://www.oddsportal.com/moving-margins/'
driver=webdriver.Chrome(可执行文件路径=r“chromedriver.exe”)
驱动程序。最大化_窗口()
def getZest(url):
zestlist=[]
年表=[]
获取驱动程序(url)
时间。睡眠(5)
结果=错误
尝试次数=0
action=webdriver.ActionChains(驱动程序)
wait=WebDriverWait(驱动程序,300)
而(尝试次数<5次):
尝试:
Home_Value=wait.until(位于((By.XPATH,//a[text()='Home Value'])的_元素的EC.presence_)
操作。将\移动到\元素(主\值)。单击()。执行()
zestimate=driver。通过xpath('/*[@id=“ds home values”]/div/div[3]/button')查找元素
动作。将_移动到_元素(zestimate)。执行()
结果=真
打破
例外情况除外。StaleElementReferenceException作为e:
打印(e)
尝试次数=尝试次数+1
五个字母=[”https://www.zillow.com/homedetails/212-Haddrell-St-Mount-Pleasant-SC-29464/10922911_zpid/", "https://www.zillow.com/homedetails/20-Grove-St-Hicksville-NY-11801/31127407_zpid/"]
对于五位数:
getZest(num)
在您的代码中,没有显示某些变量的实例化位置,因此,可能这就是问题所在


然而,当打开第一个链接时,网站向我展示了谷歌验证码保护,因此,我想你有某种授权,可以在所有者的许可下刮取信息。

@DebanjanB我意识到你对Selenium有很多经验,如果你能帮上忙,那就太好了!这听起来像是一个错误。编辑您的问题并询问实际问题,而不是寻求帮助解决问题。你想做什么?@DebanjanB我想点击网站上的一个元素,在同一个webdriver中获得多个链接。但是,当webdriver移动到第二个链接时,我得到一个StaleElementReferenceException。这就是我试图访问的任何链接的情况。我想摆脱这个例外,并能够点击网站上的所有链接列表元素。谢谢你的帮助,我将改变这个问题。@DebanjanB我知道你对Se有很多经验