如何使用Selenium选中不同行内所有class为thumbImg的元素
问题修复方案
现有代码问题
- 隐式等待配置顺序错误:当前代码先执行元素查找操作,再设置隐式等待,查找阶段等待规则还未生效,如果页面元素尚未渲染完成,自然会返回空列表。
- 定位规则不准确且脆弱:使用
//div[3]/div/div/div这种基于索引的绝对路径定位,只要页面DOM结构发生微小调整(比如新增一层div容器),路径就会失效,同时没有匹配你需要的thumbImg类属性,没有命中目标元素。
修复后代码
直接通过class属性定位目标元素,稳定性更高:
# 先配置隐式等待,再执行元素查找 driver.implicitly_wait(10) info = [] # 匹配所有class为thumbImg的div元素,可按需加上层容器缩小范围,比如写成'//div[@class="thumbnails"]//div[@class="thumbImg"]' elems = driver.find_elements_by_xpath('//div[@class="thumbImg"]') for e in elems: # 若需要提取img链接可替换为 info.append(e.find_element_by_tag_name('img').get_attribute('src')) info.append(e)
如果是动态渲染页面,隐式等待不够稳定,可以替换为显式等待:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 最多等待10秒,直到所有thumbImg元素加载完成 wait = WebDriverWait(driver, 10) elems = wait.until(EC.presence_of_all_elements_located((By.XPATH, '//div[@class="thumbImg"]'))) info = list(elems)
内容的提问来源于stack exchange,提问作者dazai
相关产品推荐
相关产品推荐

