爬取过程中出现stale element reference: element is not attached to the page document 错误
Bug实际情况描述如下:当我想爬取信息类型中的6个元素时,使用这样的

1 smallClassList = seleniumService.waitFindElements(bidCrawler.getSmallClassTag()); 2 for (WebElement smallLi : smallClassList) { 3 try { 4 Thread.sleep(1000); 5 if (smallLi.getText().contains("全部") || smallLi.getText().contains("不限") ) { 6 continue; 7 } 8 business.setSrcSmallClass(smallLi.getText()); 9 smallLi.click();
业务逻辑代码时,会在后续的遍历过程中出现页面元素过期,导致无法找到后续元素。
解决方案:需要在每次遍历时重新过去页面元素,以避免页面元素失效的情况,故本人采用了下面的业务逻辑:

1 for(int i = 0 ;i < num; i++){ 2 //for (WebElement smallLi : smallClassList) { 3 smallClassList = seleniumService.driver.findElements(By.cssSelector(bidCrawler.getSmallClassTag())); 4 try { 5 Thread.sleep(500); 6 } catch (InterruptedException e) { 7 e.printStackTrace(); 8 } 9 if (smallClassList.get(i).getText().contains("全部") || smallClassList.get(i).getText().contains("不限")) { 10 continue; 11 } 12 business.setSrcSmallClass(smallClassList.get(i).getText()); 13 14 smallClassList.get(i).click();
总结:页面资源爬取过程中,已获取的元素会产生过期失效的情况,从而导致已获取的元素不再依附于新页面,因此在爬取的过程中需要格外注意。
本文作者: 曹子叶
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.