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

爬虫中Load More按钮处理:返回页面加载丢失与动态JSON接口获取

解决爬虫返回搜索页丢失加载状态的方案

针对你遇到的「加载全部产品后进入详情页返回,搜索页丢失加载状态」的问题,给你三个可行的解决方案:

1. 在新标签页打开产品链接

不用driver.back()返回搜索页,直接在新标签页打开产品链接,处理完后关闭标签页切回原搜索页,这样搜索页的加载状态会完全保留。

示例代码:

from selenium.webdriver.common.by import By
import time

# 先完成Load More加载全部产品(原逻辑保留)
while True:
    try:
        load_more_btn = driver.find_element(By.CSS_SELECTOR, "your-load-more-button-selector")
        load_more_btn.click()
        time.sleep(2)  # 替换为显式等待更可靠
    except:
        break

# 提取所有产品链接
product_links = [elem.get_attribute("href") for elem in driver.find_elements(By.CSS_SELECTOR, "your-product-link-selector")]

# 逐个处理产品页
for link in product_links:
    # 打开新标签页
    driver.execute_script(f"window.open('{link}', '_blank');")
    # 切换到新标签页
    driver.switch_to.window(driver.window_handles[1])
    
    # 这里添加产品页的爬取逻辑
    # 比如:product_name = driver.find_element(By.CSS_SELECTOR, "your-name-selector").text
    
    # 关闭当前标签页并切回搜索页
    driver.close()
    driver.switch_to.window(driver.window_handles[0])

2. 预缓存所有产品链接

先一次性加载完所有产品,把所有产品的链接提取到列表中缓存,之后直接遍历这个列表访问产品页,不需要依赖搜索页的状态。

示例代码:

from selenium.webdriver.common.by import By
import time

# 加载全部产品
while True:
    try:
        load_more_btn = driver.find_element(By.CSS_SELECTOR, "your-load-more-button-selector")
        load_more_btn.click()
        time.sleep(2)
    except:
        break

# 缓存所有产品链接
product_links = [elem.get_attribute("href") for elem in driver.find_elements(By.CSS_SELECTOR, "your-product-link-selector")]

# 遍历链接访问产品页
for link in product_links:
    driver.get(link)
    
    # 产品页爬取逻辑
    # ...
    
    # 可选:返回搜索页(如果需要后续操作,但缓存链接后其实不需要)
    # driver.get("your-original-search-url")

3. 用滚动加载替代点击Load More

如果网站的「Load More」是滚动触底触发的,可以通过JS滚动页面自动加载全部内容,避免点击按钮可能出现的问题,之后同样缓存链接处理。

示例代码:

from selenium.webdriver.common.by import By
import time

# 滚动加载全部产品
last_scroll_height = driver.execute_script("return document.body.scrollHeight")
while True:
    # 滚动到页面底部
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(2)
    # 检查是否加载了新内容
    new_scroll_height = driver.execute_script("return document.body.scrollHeight")
    if new_scroll_height == last_scroll_height:
        break
    last_scroll_height = new_scroll_height

# 提取链接并处理,同方案2
product_links = [elem.get_attribute("href") for elem in driver.find_elements(By.CSS_SELECTOR, "your-product-link-selector")]
for link in product_links:
    driver.get(link)
    # 产品页爬取逻辑
    # ...

方案对比

  • 新标签页方案:完全保留搜索页状态,适合需要在搜索页继续操作的场景,但产品过多时可能导致浏览器卡顿。
  • 缓存链接方案:逻辑最简单,无需处理多标签页,适合大多数场景。
  • 滚动加载方案:适配滚动触发加载的网站,避免按钮点击失效的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 00:11:10