python - 无法使用 webdriver 从 xpath 拆分一个单元格的表中获取数据
问题描述
无法从一个单元格的拆分表中获取数据,谢谢!
Python代码
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("url")
print driver.find_element_by_xpath('//html/body/div/div[3]/table/tbody/tr[1]/td[4]/p[1]/span').text
print driver.find_element_by_xpath('//html/body/div/div[3]/table/tbody/tr[1]/td[4]/p[1]/i').text
print driver.find_element_by_xpath('//html/body/div/div[3]/table/tbody/tr[1]/td[4]/p[2]').text
预期结果
5 1-1/2 14.34
错误信息:
Unable to locate element: //html/body/div/div[3]/table/tbody/tr[1]/td[4]/p[1]/span
但实际上这些数据存在于表中
解决方案
您的代码是正确的,但您的代码在页面完全加载之前检查元素。您可以做的最简单的事情是添加wait
条件。
在下面的代码中,驱动程序轮询 HTML 20 秒以加载要加载的元素。在检查元素是否存在之前,它并没有完全等待整个 20 秒,而是等待元素加载 20 秒,然后它会抛出一个NoSuchElementException
from selenium import webdriver
driver = webdriver.Firefox()
driver.implicitly_wait(20) # seconds
driver.get("url")
print(driver.find_element_by_xpath('//html/body/div/div[3]/table/tbody/tr[1]/td[4]/p[1]/span').text)
print(driver.find_element_by_xpath('//html/body/div/div[3]/table/tbody/tr[1]/td[4]/p[1]/i').text)
print(driver.find_element_by_xpath('//html/body/div/div[3]/table/tbody/tr[1]/td[4]/p[2]').text)
推荐阅读
- swift - 如何在 Swift 中为枚举编写变异函数
- exception - RavenDB 导出问题
- impala - 删除空的 Impala 分区
- javascript - 无论对象的顺序如何,如何使用 lodash 比较对象
- angular - 如何在获取http请求中使用limit和offet?
- android - 在 Kotlin 中使用回调处理多线程的最佳方法是什么?
- python - 如何合并两个多索引数据框?
- javascript - 如何将组件数组转换为具有嵌套子级的组件?
- css - Tippy.js z-index 不适用于交互性
- python - 如何跳过 tf.while_loop() 的当前迭代?