Selenium Java从多层div提取数据时图片内容重复输出问题求助
代码错误说明及修复方案
错误原因
- XPath查询范围错误:在当前元素
e下调用findElements时,使用开头为//的XPath会从整个HTML文档根节点检索,不是限定在e的子节点范围内,因此每次循环都拿到页面第一个匹配的图片元素,导致图片链接重复。 - num字段取值逻辑错误:代码中
urls.get(0).getAttribute("this_is_num")固定取列表第一个元素的num属性,属于逻辑隐患,后续列表变更会直接导致num取值错误。 - 空指针隐患:未校验元素列表是否为空就直接取
get(0),匹配不到元素时会直接抛出异常。
修复代码
public static void get_Data_() throws IOException { List<WebElement> urls = driver.findElements(By.cssSelector("this_is_container_div")); for(WebElement e: urls) { // 路径开头加. 限定在当前元素e内部搜索 List<WebElement> img_html = e.findElements(By.xpath(".//my_img_xpath")); List<WebElement> title_html = e.findElements(By.cssSelector(".my_title_selector")); // 改为取当前循环元素e的属性 String num = e.getAttribute("this_is_num"); String title = title_html.isEmpty() ? "" : title_html.get(0).getText(); String image = img_html.isEmpty() ? "" : img_html.get(0).getAttribute("src"); System.out.println( num +" " +title+" "+image); } }
内容的提问来源于stack exchange,提问作者e-Tester
相关产品推荐
相关产品推荐

