使用visibility_of_all_elements_located提取表格数据时如何编写XPath表达式
问题解答
你应该选择第二个wait.until语句,两者的核心区别如下:
- 第一个写法匹配的是
id=target的表格容器本身,仅能保证表格外层元素已经加载可见,无法保障表格内部的单元格(td标签)已经全部渲染完成。如果是异步加载数据的表格,用这个判断条件很容易出现后续提取td时数据缺失的问题。 - 第二个写法匹配的是目标表格下的所有td节点,会等待所有单元格都可见后再向下执行代码,能最大程度保证你提取到完整的表格文本内容。
补充注意事项:
- 你给出的两个示例写法都存在语法错误,
visibility_of_all_elements_located方法要求传入的是定位器元组,需要额外加一层括号包裹By规则和路径,修正后的正确写法如下:wait.until(EC.visibility_of_all_elements_located((By.XPATH, ".//table[@id='target']//td")))
- 如果表格中存在不需要可见、仅需要存在于DOM树中的隐藏td,可以将
visibility_of_all_elements_located替换为presence_of_all_elements_located。- 如果表格数据量较大,建议适当调高显式等待的超时时间,避免还没加载完全部td就触发超时异常。
内容的提问来源于stack exchange,提问作者showkey
相关产品推荐
相关产品推荐

