Selenium Python遍历元素时获取重复data-date值问题求助
解决Selenium重复获取子元素值的问题
问题根源在于你使用的XPath是绝对路径查询://div[@class='diary-day-date'] 会从整个HTML文档的根节点开始搜索,所以每次循环都只会返回页面中第一个匹配的diary-day-date元素,自然输出重复。
要实现从当前diary-day区块内查询子元素,必须改用相对路径——在XPath开头加上./,表示从当前遍历的i节点(也就是单个diary-day区块)开始向下搜索。
修改后的代码:
driver.get("site") time.sleep(3) diary_main = driver.find_elements(By.XPATH, "//div[@class='diary-day']") for i in diary_main: # 用相对路径定位当前区块内的子元素 diary_date = i.find_element(By.XPATH, ".//div[@class='diary-day-date']").get_attribute("data-date") print(diary_date) print(i.text) time.sleep(2)
额外优化方案:
也可以直接一次性定位所有目标子元素,同时关联父元素内容,减少循环内的查询操作:
driver.get("site") time.sleep(3) # 直接定位所有diary-day下的date元素 date_elements = driver.find_elements(By.XPATH, "//div[@class='diary-day']/div[@class='diary-day-date']") for elem in date_elements: diary_date = elem.get_attribute("data-date") print(diary_date) # 通过父节点获取对应diary-day的文本 print(elem.find_element(By.XPATH, "./..").text) time.sleep(2)
内容的提问来源于stack exchange,提问作者Deprool
相关产品推荐
相关产品推荐

