Selenium元素ID/属性定位及多页表格爬取问题求助
解决Selenium爬取表格的常见问题
1. 处理NoSuchElementException与正确使用driver.find_element_by_id
- 确认元素真实ID:打开浏览器开发者工具(F12)定位目标元素,查看其
id属性值。若网站使用动态生成的ID(含随机字符),放弃find_element_by_id,改用find_element_by_xpath或find_element_by_css_selector更可靠。 - 添加等待机制:元素未加载完成就查找会触发报错,用显式等待替代直接查找:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 最多等待10秒,直到元素出现 wait = WebDriverWait(driver, 10) target_element = wait.until(EC.presence_of_element_located((By.ID, "真实元素ID")))
2. 正确使用get_attribute获取属性值
get_attribute的参数是元素的HTML属性名,常见场景:- 获取输入框内容:
element.get_attribute("value") - 获取链接地址:
element.get_attribute("href") - 获取图片地址:
element.get_attribute("src")
- 获取输入框内容:
- 若要获取元素的文本内容,直接用
element.text更简便,无需调用get_attribute。
3. 爬取多页表格获取完整数据
- 循环处理分页:定位「下一页」按钮,判断其是否可点击(如是否含禁用类),循环点击并爬取每页数据:
while True: # 爬取当前页表格数据 table = driver.find_element(By.ID, "表格ID") rows = table.find_elements(By.TAG_NAME, "tr") for row in rows[1:]: # 跳过表头行 cols = row.find_elements(By.TAG_NAME, "td") row_data = [col.text for col in cols] # 将row_data存入列表或文件 # 尝试点击下一页 try: next_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), '下一页')]"))) # 检查按钮是否禁用 if "disabled" in next_btn.get_attribute("class"): break next_btn.click() # 等待页面刷新完成(旧表格元素失效则说明新数据加载) wait.until(EC.staleness_of(table)) except: # 无下一页时退出循环 break
- 额外提示:若分页通过URL参数(如
?page=2)实现,可直接构造URL循环请求,效率比模拟点击更高。
内容的提问来源于stack exchange,提问作者S.EB
相关产品推荐
相关产品推荐

