Selenium遍历报错:TypeError: 'WebElement' object is not iterable 如何获取所有推文行
问题修复说明
报错根因
TypeError: 'WebElement' object is not iterable报错是因为你使用find_element_by_xpath获取行数据,该方法仅返回单个WebElement对象,不支持for循环迭代操作。
需调整的代码点
- 抓取多行元素要调用带复数的
find_elements_by_xpath方法,同时调整xpath定位到表格的行标签<tr>,不要定位外层div容器 - 显式等待
wait.until需传入预期条件,不能直接写元素查找语句 - 不要调用
get_attribute('td')获取单元格内容,需要先定位到行下的<td>元素,再读取text属性拿内容
修正后参考代码
from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC import time driver.get("https://www.trackmyhashtag.com/") form = driver.find_element_by_xpath("//*[@class='container']") usrinput = driver.find_element_by_xpath('/html/body/header/div[2]/div/div[2]/form/div/div[1]/input') usrinput.clear() usrinput.send_keys("india") loginbt = driver.find_element_by_xpath('/html/body/header/div[2]/div/div[2]/form/div/div[2]/button') loginbt.click() time.sleep(5) ad = driver.find_element_by_xpath('/html/body/div[1]/div[1]/div/div[3]/div/div/div/button') ad.click() time.sleep(5) element = driver.find_element_by_xpath('/html/body/aside/nav/div/ul/li[2]/a') actions = ActionChains(driver) actions.move_to_element(element).perform() actions.click().perform() time.sleep(5) # 修正显式等待写法 ad = wait.until(EC.element_to_be_clickable((By.XPATH, '/html/body/div[1]/div[1]/div/div[3]/div/div/div/button'))) ad.click() # 修正行定位:用find_elements,定位tr行元素 rows = driver.find_elements_by_xpath('/html/body/div[1]/div[1]/div[1]/div[5]/div/div/div/div[2]/div//tr') for row in rows: # 获取当前行所有单元格内容 tds = row.find_elements_by_tag_name('td') row_data = [td.text for td in tds] print(row_data) print("inside it")
补充注意
如果该表格是懒加载渲染,需要先滚动页面到表格底部触发全部数据加载后,再执行行抓取逻辑,避免漏抓数据。
内容的提问来源于stack exchange,提问作者pkk
相关产品推荐
相关产品推荐

