如何在Python Selenium中使用显式等待解析世行项目文档页面
使用Selenium显式等待解析世界银行项目文档页面
需求
- 访问指定的世界银行项目文档URL
- 显式等待页面加载完成,需处理两种情况:加载出文档表格,或加载出“No data available.”提示
- 解析并提取文档表格内容
原始代码问题
你提供的代码存在以下问题:
urls列表末尾缺少闭合括号,存在语法错误wait.until的参数使用错误,visibility_of_any_elements_located仅接受一个定位元组,无法直接传入两个定位器- 元素定位依赖动态生成的
_ngcontent-c2属性,这类属性会随页面渲染变化,稳定性极差 - 未区分“有表格数据”和“无数据”两种场景,直接提取元素会触发报错
修正后的代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import pandas as pd # 修复urls列表的语法错误 urls = [ 'https://projects.worldbank.org/en/projects-operations/document-detail/P179109?type=projects', 'https://projects.worldbank.org/en/projects-operations/document-detail/P179278?type=projects' ] driver = webdriver.Chrome() wait = WebDriverWait(driver, 15) # 延长等待时间适配页面加载速度 results = [] for url in urls: driver.get(url) # 使用EC.or_等待两个条件之一:表格行可见,或无数据提示可见 wait.until( EC.or_( EC.visibility_of_element_located((By.CSS_SELECTOR, "table.document-table tbody tr")), EC.visibility_of_element_located((By.XPATH, "//div[contains(text(), 'No data available.')]")) ) ) # 判断当前页面是有数据还是无数据 try: # 尝试获取无数据提示元素 no_data = driver.find_element(By.XPATH, "//div[contains(text(), 'No data available.')]") results.append({"url": url, "status": "无数据", "content": None}) except: # 有数据时解析表格内容 table = driver.find_element(By.CSS_SELECTOR, "table.document-table") # 利用pandas快速将表格HTML转为DataFrame df = pd.read_html(table.get_attribute('outerHTML'))[0] results.append({"url": url, "status": "有数据", "content": df}) # 关闭浏览器 driver.quit() # 输出解析结果 for res in results: print(f"URL: {res['url']}") print(f"状态: {res['status']}") if res['content'] is not None: print("表格内容:") print(res['content']) print("-"*50)
关键改进说明
- 显式等待逻辑:通过
EC.or_实现“等待任一条件满足”,同时监听表格行和无数据提示的可见性,确保覆盖所有场景 - 稳定元素定位:替换动态
_ngcontent属性为页面固定的CSS类(如document-table)和文本内容定位,大幅提升代码稳定性 - 场景分支处理:用try-except判断页面状态,分别处理有数据和无数据的情况,避免运行时报错
- 表格解析优化:借助
pandas.read_html直接将表格HTML转为DataFrame,简化数据提取与后续处理逻辑
内容的提问来源于stack exchange,提问作者Mohamed Abd ElShafy
相关产品推荐
相关产品推荐

