Selenium(Python)中StaleElementReferenceException问题求助
解决Selenium的StaleElementReferenceException问题
嘿,我太懂你踩的这个坑了!你代码里的问题其实特别常见——当你调用browser.get(i.get_attribute("href"))跳转到新页面时,原来页面的DOM结构已经被销毁了,之前通过find_elements_by_css_selector获取到的components元素集合,它们的引用也就跟着失效了,所以第二次循环直接抛出了StaleElementReferenceException。
你以为find_elements会把元素引用牢牢存住,但实际上这些元素是和当前页面的DOM绑定死的,页面一刷新或者跳转,它们就变成“过期无效”的了。不过解决方法超简单,我们只需要先把所有链接提取出来存成字符串列表,再循环这个列表去访问就行,这样就完全脱离了对原页面元素的依赖。
修改后的代码长这样:
url="https://www.pla...com" browser=Chrome(executable_path='chromedriver') browser.get(url) # 先把所有目标链接提取到本地列表中 links = [elem.get_attribute("href") for elem in browser.find_elements_by_css_selector('.files-new a')] # 循环访问列表里的每个链接 for link in links: print(link) browser.get(link) # 这里可以添加你对每个跳转后页面的处理逻辑 # 如果之后需要回到原页面继续操作,可以加上:browser.back()
这样修改后,不管页面怎么跳转,我们手里的都是独立的字符串链接,再也不会出现元素引用过期的问题了。另外如果你的页面加载比较慢,还可以考虑加上Selenium的显式等待,确保元素加载完成后再提取链接,避免漏掉内容~
内容的提问来源于stack exchange,提问作者Fuad Ak
相关产品推荐
相关产品推荐

