首页 > 解决方案 > Selenium 循环,表格缺少第一行和最后一列

问题描述

我正在尝试获取下面 url 中显示的表格。但是结果却漏掉了第一行(2021-1)和最后一列(净(亿1))。我做错了什么?

from selenium import webdriver

driver = webdriver.Firefox(executable_path = '/usr/local/bin/geckodriver')
driver.get('http://www.chinamoney.com.cn/chinese/hb/')

rws = driver.find_elements_by_xpath("//table/tbody/tr")
r = len(rws)

cols = driver.find_elements_by_xpath("//thead/tr/td")
c = len(cols)

element = []
row = []
for i in range(1,r):
    for j in range(1,c):
        d=driver.find_element_by_xpath("//tr["+str(i)+"]/td["+str(j)+"]").text
        row.append(d)

element.append(row)
driver.close()

element

标签: seleniumhtml-table

解决方案


  1. 您应该使用从 0 开始的范围,而不是从 1 开始
  2. 此外,您应该在访问表格内容之前添加一些等待以让页面完全加载。
    我将在这里添加一个简单的延迟,但最好使用显式等待。请查看以下代码是否更适合您:
from selenium import webdriver

driver = webdriver.Firefox(executable_path = '/usr/local/bin/geckodriver')
driver.get('http://www.chinamoney.com.cn/chinese/hb/')

time.sleep(5)
rws = driver.find_elements_by_xpath("//table/tbody/tr")
r = len(rws)

cols = driver.find_elements_by_xpath("//thead/tr/td")
c = len(cols)

element = []
row = []
for i in range(r):
    for j in range(c):
        d=driver.find_element_by_xpath("//tr["+str(i)+"]/td["+str(j)+"]").text
        row.append(d)

element.append(row)
driver.close()

element

推荐阅读