问题:
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document (Session info: chrome=99.0.4844.74)
产生原因:
最近在学习爬虫,其中在学习selenium时出现了这个问题,网上也出现了一些对于这种问题的解决方案。
第一种:
wait = WebDriverWait(browser, 10)
wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'ListFooter')))
这种方法是不可行的,网站很多情况并不是没有到达页面尾部
第二种:
在我们请求到页面后进行等待,这种方法是可行的。下面就通过某网站进行举例说明:
self.driver.get(self.url)
time.sleep(10)
room_list = self.driver.find_elements_by_xpath('//*[@id="listAll"]/section[2]/div[2]/ul/li/div')
为什么要等待几秒后,才继续进行数据采集呢,因为现在的网站与原来大有不同,比如下面的从某直播平台取得的包,我们可以发现除了有document类型的all响应包外,还有一个同名的sw.js:1,这个响应是用来实时刷新的,即对页面进行一次实时内容刷新,这对于直播这种实时平台来说,即为的关键,但对于我们有什么影响呢?
当我们不进行暂停时,那么我们得到的页面是没有通过json请求填充数据的设为sw:js:1界面,或者是过时的被刷新前的页面,此时对与web_driver来说,就有可能出现元素未附着的情况。
包括网csdn有网友是这样说的:每次对其页面进行操作以后,使用selenium对其下一次循环进行操作的时候抛出了异常:
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element
意思就是说:陈旧元素引用异常
原因是,因为表格中对其进行的点击操作,导致页面有重新加载。
归根结底就是网页进行了更新操作,感兴趣的朋友可以自己去一些实时刷新的网站就行尝试尝试。