Selenium循环点击同class元素并爬取数据的问题求助
问题分析与修正代码
你的代码存在几个核心问题:
- 提前获取的
elems列表,在返回原页面后会变成失效元素(Stale Element)——因为页面DOM已刷新,原元素的引用不再有效。 - 每次点击都调用
driver.find_element(By.CLASS_NAME, 'XYZabc'),这只会重复点击第一个元素,无法依次处理后续目标。 data的存储逻辑混乱,把元素文本和信息字典分开追加,不利于后续数据处理。
修正后的代码如下:
data = [] max_count = 10 # 最多处理10个元素,可按需调整 current_index = 0 while True: # 每次返回原页面后重新获取元素列表,避免失效 elems = driver.find_elements(By.CLASS_NAME, 'XYZabc') # 终止条件:无更多元素,或已处理到第10个 if current_index >= len(elems) or current_index >= max_count: break # 获取当前元素的文本 elem_text = elems[current_index].get_attribute('innerText') # 点击第current_index个目标元素 elems[current_index].click() # 提取目标页面信息 title = driver.find_element(By.XPATH, '//*[@id="main"]/div[1]/div/div/div/div/h1').get_attribute('innerText') date = driver.find_element(By.CLASS_NAME, 'publish-date').get_attribute('innerText') # 整合信息到字典,统一存入data data.append({ "LinkText": elem_text, "Title": title, "Date": date }) # 返回原页面 driver.back() # 索引递增,处理下一个元素 current_index += 1
关键改动说明:
- 改用
while循环,每次回到原页面后重新获取元素列表,彻底解决失效元素问题。 - 用
current_index定位当前要点击的元素,确保依次处理第1、2、...个目标。 - 把元素文本、标题、日期整合到同一个字典,保持
data结构统一,方便后续使用。 - 保留了最多处理10个元素的限制,可通过修改
max_count调整数量。
内容的提问来源于stack exchange,提问作者VRapport
相关产品推荐
相关产品推荐

