You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium点击下拉框后page_source未更新,仅获前12条数据问题

问题排查与解决方案

嘿,我来帮你搞定这个爬取问题!你遇到的核心问题是点击下拉加载全部数据后,页面视觉上显示了,但Selenium还没捕捉到更新后的DOM,导致只拿到初始的12条数据。下面是具体的原因分析和修复方案:

核心原因:等待机制不对

你的代码里用了driver.implicitly_wait(5),但它的作用是「当找不到元素时最多等5秒」,而不是「等待页面内容完全更新」。点击下拉选项后,页面是通过AJAX异步加载300条数据的,这个过程需要时间,但初始的12条元素已经存在,所以Selenium会直接返回旧的元素列表,不会等新数据加载完成。

修复方案:用显式等待替代隐式等待

我们需要用WebDriverWait来显式等待页面内容更新,比如等待列表元素的数量超过12,或者直接等待元素数量达到300。这样能确保我们在获取数据前,页面已经完全加载了所有内容。

修改后的完整代码

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = webdriver.Chrome("/home/ronith/Downloads/chromedriver")
driver.get('https://www.findinall.com/finance-category-396/#')

# 点击显示300条的下拉选项
driver.find_element_by_xpath("//select[@name='per_page']/option[@value='300']").click()

# 显式等待:最多等20秒,直到列表元素数量超过初始的12条
wait = WebDriverWait(driver, 20)
wait.until(lambda driver: len(driver.find_elements_by_xpath('//div[@class="pro-list-tb mt15"]')) > 12)

# 可选:滚动到页面底部,确保所有元素都被渲染(有些页面需要滚动才会加载全部内容)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# 再等一下,确保滚动后的元素完全加载
wait.until(lambda driver: len(driver.find_elements_by_xpath('//div[@class="pro-list-tb mt15"]')) == 300)

# 现在获取所有数据
data = driver.find_elements_by_xpath('//div[@class="pro-list-tb mt15"]')
for item in data:
    print(item.text, '\n\n')

driver.close()

额外注意点

  • 如果你发现等待20秒还是不够,可以适当延长等待时间(比如改成30),因为不同网络环境下加载速度不同。
  • 可以在获取数据前打印len(data),确认是否拿到了300条元素,方便调试。

内容的提问来源于stack exchange,提问作者Ronith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:08:18