如何使用Python Selenium获取不同元素的属性值并保存到文本文件
Python Selenium提取表格配对数据问题解答
问题原因
- XPath语法错误:你写的
//*tbody属于错误写法,*是节点通配符,不能直接拼接在tbody前,该写法会匹配标签名为*tbody的不存在节点,导致name和ID两个列表为空,自然没有输出结果。 - 缺少加载等待:如果页面是动态渲染的,代码执行查找逻辑时表格DOM还未加载完成,也会返回空列表拿不到数据。
- 配对逻辑不安全:分开查找姓名和ID两个列表,一旦出现某行缺少对应节点的情况,会出现两个列表长度不一致,要么索引报错要么配对错位。
- 冗余代码:
with open语法会自动管理文件句柄,执行完缩进块后会自动关闭文件,末尾的file.close()属于多余代码,虽然不影响运行但建议删除。 - 补充:如果使用Selenium4及以上版本,
find_elements_by_xpath方法已被官方废弃,执行会抛出警告甚至报错。
修正后代码
Selenium3兼容版本
# 先获取所有tr行节点 tr_list = driver.find_elements_by_xpath("//tbody/tr") with open('output.txt','a', encoding='utf-8') as file: for tr in tr_list: # 单tr内部查找对应元素,避免配对错误 name = tr.find_element_by_xpath("./td[1]").text.strip() data_id = tr.find_element_by_xpath("./td[2]/input").get_attribute('data-id') file.write(f"{name};{data_id}\n")
Selenium4推荐写法(目前主流版本建议使用)
先导入依赖:
from selenium.webdriver.common.by import By # 可选:需要加显式等待可以导入下面两个模块 from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC
核心逻辑:
# 可选:加显式等待,最多等10秒直到表格tr加载完成 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.XPATH, "//tbody/tr")) ) tr_list = driver.find_elements(By.XPATH, "//tbody/tr") with open('output.txt','a', encoding='utf-8') as file: for tr in tr_list: name = tr.find_element(By.XPATH, "./td[1]").text.strip() data_id = tr.find_element(By.XPATH, "./td[2]/input").get_attribute('data-id') file.write(f"{name};{data_id}\n")
补充说明
- 代码新增
encoding='utf-8'参数,避免写入非英文内容时出现乱码 - 用
strip()去除姓名前后的空白字符,避免多余的换行、空格污染输出内容 - 按行遍历的逻辑彻底避免了两个列表配对错位的问题
内容的提问来源于stack exchange,提问作者Jason Low
相关产品推荐
相关产品推荐

