【Selenium】stale element reference: element is not attached to the page document

官方文档链接: link

有两种情况会导致这种报错:

  1. 元素被删除
  2. 元素不再存在于DOM对象中

其中第一种更常见,最常见的原因是元素所在的页面被刷新或重定向。解决这个问题可以在selenium模拟浏览器翻页或刷新的代码前加入time.sleep,因为很多网页都是通过ajax加载信息的,信息加载的过程需要一定时间,下载也需要时间,如果它还没下载完你的selenium就跳转到下一页了当然就会出问题。
另一种原因是js将元素替换为另一个相同属性的元素,这时可以视情况重新查找元素。
对于第二种情况就必须重新定位元素了。比如我最近爬取了某网站,以下是该网站部分源码,需要的信息位于a节点:
【Selenium】stale element reference: element is not attached to the page document_第1张图片
可见a节点外套有许多其他节点,经测试大部分似乎都可以唯一地定位a节点。不过这只是部分数据,还有相当一部分数据不在源码中,它们是通过ajax加载的,但我觉得它们的格式应该都一样,于是就选择了位于li节点下的类属性为item-bgdiv节点定位信息。结果程序报错:

Message: stale element reference: element is not attached to the page document
  (Session info: chrome=83.0.4103.97)

后来改为通过最外层的li定位就没问题了,可能是ajax加载的li节点中有的没有类属性为item-bgdiv节点,或者类属性是别的值。所以遇到这种情况可以考虑选用另一种定位方式。

你可能感兴趣的:(【Selenium】stale element reference: element is not attached to the page document)